2017-11-08 2 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( '#copiaTabella SELECT * FROM'、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(+ @sNomeTabella_APPO + 'WHERE 1 = 2' 'FROM copiaTabella ## INTO SELECT *') \t \t DECLAREの@sqlのNVARCHAR(MAX)は、NVARCHAR(MAXを@cols )= N "; \t SELECT @cols + = N '、' + name - + '' + system_type_name \t FROM sys.dm_exec_describe_first_result_set( 'SELECT * FROM ## copiaTabella'、NULL、1); \t SET @cols = STUFF(@cols、1,1、N "); \tプリント(@cols)\t \t \tドロップテーブル## copiaTabella 今の私は、みんなのおかげで解決しました! – memmo77