[SQL] TSQL 동적 SQL에서 임시 테이블로 선택
SQLTSQL 동적 SQL에서 임시 테이블로 선택
이것은 비교적 간단 보인다,하지만 분명히 그렇지 않다.
나는 구문으로 선택을 통해 기존의 테이블을 기반으로 임시 테이블을 작성해야합니다 :
SELECT * INTO #TEMPTABLE FROM EXISTING_TABLE
문제는 기존의 테이블 이름은 매개 변수를 통해 접수입니다 ...
나는 테이블의 데이터를 통해 얻을 수 있습니다 :
execute ('SELECT * FROM ' + @tableName)
하지만 두 그래서 결혼을 어떻게 내가 임시 테이블에 실행에서 직접 결과를 넣을 수있다.
이으로 사용하는 것을 각 테이블의 열은 데이터를 가져 오는 것은 실용적이지되기 전에 임시 테이블을 구축 같은 그렇게하지 않습니다.
나는 전역 임시 테이블을 사용하여 제외한 모든 제안에 개방적이야.
최신 정보:
이것은 완전히 말도 있지만, 글로벌 임시 테이블 내 예약이 테이블이 오랜 시간 동안 남아 않을 경우 다중 사용자 플랫폼은 문제라는 것으로 점이다 ...
SOOO .. 그냥은 글로벌 임시 테이블을 생성하는 실행 사용하여 시작했습니다이 부분을지나 얻을 수 있습니다.
execute('select * into ##globalDynamicFormTable from ' + @tsFormTable)
나는 다음 로컬 임시 테이블을로드 할 글로벌 임시 테이블을 사용합니다 :
select * into #tempTable from ##globalDynamicFormTable
나는 다음 글로벌 테이블을 삭제.
drop table ##globalDynamicFormTable
이 더러운이며 나는 그것을 좋아하지 않아,하지만 난 더 나은 솔루션을 얻을 때까지 당분간, 그 일을해야 할 것.
결국 :
나는 그것을 극복 할 수있는 방법이없는 것 같아요.
가장 좋은 대답이 될 것으로 보인다;
명령 실행의 뷰를 작성하고 저장 프로 시저에서 지역 임시 테이블을로드하는 것을 사용한다.
명령 실행의 글로벌 임시 테이블을 만들고 로컬 임시 테이블을로드하는 것을 사용한다.
그 생성 및 내 조직에 감사한다 전망을 떨어 뜨리고 있기 때문에 내가 아마 글로벌 임시 테이블을 고수 것이고, 나는 확실히 그들이 그것을 시작하면 모든 시간을 일이 그 질문에가는거야 말한다면.
감사!
해결법
-
==============================
1.동작하는 예제.
동작하는 예제.
DECLARE @TableName AS VARCHAR(100) SELECT @TableName = 'YourTableName' EXECUTE ('SELECT * INTO #TEMP FROM ' + @TableName +'; SELECT * FROM #TEMP;')
접근 임시 테이블에 두 번째 솔루션
DECLARE @TableName AS VARCHAR(100) SELECT @TableName = 'YOUR_TABLE_NAME' EXECUTE ('CREATE VIEW vTemp AS SELECT * FROM ' + @TableName) SELECT * INTO #TEMP FROM vTemp --DROP THE VIEW HERE DROP VIEW vTemp /*START USING TEMP TABLE ************************/ --EX: SELECT * FROM #TEMP --DROP YOUR TEMP TABLE HERE DROP TABLE #TEMP
-
==============================
2.
declare @sql varchar(100); declare @tablename as varchar(100); select @tablename = 'your_table_name'; create table #tmp (col1 int, col2 int, col3 int); set @sql = 'select aa, bb, cc from ' + @tablename; insert into #tmp(col1, col2, col3) exec( @sql ); select * from #tmp;
-
==============================
3.내가 동적 SQL에 피벗으로 그것을 어떻게 (#AccPurch이 이전에 생성 된)
내가 동적 SQL에 피벗으로 그것을 어떻게 (#AccPurch이 이전에 생성 된)
DECLARE @sql AS nvarchar(MAX) declare @Month Nvarchar(1000) --DROP TABLE #temp select distinct YYYYMM into #temp from #AccPurch AS ap SELECT @Month = COALESCE(@Month, '') + '[' + CAST(YYYYMM AS VarChar(8)) + '],' FROM #temp SELECT @Month= LEFT(@Month,len(@Month)-1) SET @sql = N'SELECT UserID, '+ @Month + N' into ##final_Donovan_12345 FROM ( Select ap.AccPurch , ap.YYYYMM , ap.UserID , ap.AccountNumber FROM #AccPurch AS ap ) p Pivot (SUM(AccPurch) FOR YYYYMM IN ('+@Month+ N')) as pvt' EXEC sp_executesql @sql Select * INTO #final From ##final_Donovan_12345 DROP TABLE ##final_Donovan_12345 Select * From #final AS f
-
==============================
4.OPENROWSET에서 살펴보고 같은 것을 할 :
OPENROWSET에서 살펴보고 같은 것을 할 :
SELECT * INTO #TEMPTABLE FROM OPENROWSET('SQLNCLI' , 'Server=(local)\SQL2008;Trusted_Connection=yes;', 'SELECT * FROM ' + @tableName)
from https://stackoverflow.com/questions/9534990/tsql-select-into-temp-table-from-dynamic-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 하이버 네이트 기준의 합 ()을 사용하여 (0) | 2020.06.13 |
---|---|
[SQL] MySQL은 : 테이블의 기본 키를 동적으로 결정 (0) | 2020.06.12 |
[SQL] 액세스 SQL에서 '이스케이프 (0) | 2020.06.12 |
[SQL] 저장 프로 시저에서 SQL Server 에이전트 작업을 실행하고 작업 결과를 반환 (0) | 2020.06.12 |
[SQL] 데이터베이스에 널 (null)에 의해 사용되는 공간 (0) | 2020.06.12 |