2017-11-08 1 views
1

주기에 내가 변환해야합니다TSQL - 동적 복사 테이블 구조

SELECT * INTO #copiaTabella FROM #TABELLA WHERE 1 = 2 

동적

EXECUTE('SELECT * INTO #copiaTabella FROM ' + @sNomeTabella_APPO + ' WHERE 1 = 2') 

에 따라서는 작동하지 않습니다. 그렇게 할 수있는 방법이 있습니까?

+1

귀하의 궁극적 인 목표에 따라 다릅니다. 그것은'# copiaTabella'가 'EXECUTE()'에 범위가 있기 때문에 실패합니다. 그래서 그것의 외부에 존재하지 않습니다. –

+0

그러면 다음과 같이해야합니다 : \t \t'code' DECLARE @sql NVARCHAR (MAX), @cols NVARCHAR (MAX) = N "; \t \t SELECT @cols + = N ','이름 + - + ','+ system_type_name \t \t sys.dm_exec_describe_first_result_set FROM (''* FROM #copiaTabella NULL, 1); \t \t SET @cols = STUFF (@cols, 1, 1, N "); 'code' – memmo77

+0

"작동하지 않는다"고 정의 할 수 있습니까? –

답변

0

동적 T-SQL 문에서 생성 된 임시 개체는 외부 범위에 표시되지 않습니다. 각 시간을 다른 테이블 구조를 만들 필요가 있다면, 당신은 동적 T-SQL 문 등의 T-SQL 조작의 나머지 부분을 포함해야

EXECUTE sp_executesql N'CREATE TABLE #TEST ([a] INT);' 

SELECT * 
FROM #TEST; 

Msg 208, Level 16, State 0, Line 3 Invalid object name '#TEST'.

: 예를 들어, 다음은 오류가 발생합니다 잘.

+0

답해 주셔서 감사합니다. 무엇을 의미합니까 : 때마다 다른 테이블 구조를 만들어야 할 경우 동적 T-SQL 문에도 나머지 T-SQL 조작을 포함시켜야합니다. – memmo77

+0

만약 당신이 그런 테이블을 만들고 나서 (삽입/삭제/선택) 동적 T-SQL에서 이러한 연산들을 추가하고 그것들을 실행하기 만하면된다. – gotqn

+0

그래서 그것은 작동 : 는 \t'code'EXECUTE는 ('SELECT * FROM ## copiaTabella INTO'+ @sNomeTabella_APPO + '1 = 2 WHERE') \t \t DECLARE의 @Sql NVARCHAR (MAX)가, NVARCHAR을 @cols (MAX) = N "; \t SELECT @cols + = N ','+ 이름 - + ''+ system_type_name \t FROM sys.dm_exec_describe_first_result_set ('SELECT * FROM ## copiaTabella', NULL, 1); \t SET @cols = STUFF (@ 콜, 1, 1, N ''); \t 인쇄 (@cols는) \t \t \t 드롭 테이블 ## copiaTabella 은 지금 나는 모든 사람들에게 감사를 해결했다! – memmo77