0

私は、クエリでかなり多くの変数を使用する必要がある T-SQL で、かなり長くて複雑な手順に取り組んでいます。

私はこのようなものに行き詰まりました:

SELECT @TableSQL = 'SELECT ' 
                   + @columnsForInsert 
                   + '= COALESCE(@columnsForInsert 
                   + ''], ['', '''') 
                   + name 
FROM MIGRATION_DICTIONARIES.dbo.' + @TableName + '_COLUMNS '
EXEC sp_executesql @TableSQL
PRINT @columnsForInsert 

ご覧のとおり、一時テーブルのすべての行を 1 行に連結し、それを@columnsForInsert変数に割り当てようとしています。ただし、この文字列を実行すると、表示されないsp_executesqlスコープに移動し@columnsForInsertます。

これを実行する方法を知っていますか?

言い換えると。私は次のようなものを持っています

SELECT @columnsForInsert = COALESCE(@columnsForInsert + '], [', '') + name 
FROM MIGRATION_DICTIONARIES.dbo.Foobar_COLUMNS

これは私の手順ではうまくいきます。ただし、最終バージョンでは Foobar は変数になるため、単純な配置@tableNameは機能しません。どうすればこれを達成できますか?

Microsoft SQL Server 2012 を使用しています

4

1 に答える 1

0

からの出力をキャプチャする方法の例を次に示します。sp_executesql

http://support.microsoft.com/kb/262499

私はそれをしたことがありませんが、以下の構文が変数値をあなたから取得するために機能する可能性があることを意味しますsp_executesql(すべての引用符が正しい場所にあり、構文が正しいと仮定します)

DECLARE @columnsForInsertOUT VARCHAR(400)
DECLARE @columnsForInsert    VARCHAR(400)
DECLARE @ParmDefinition      VARCHAR(50)
DECLARE @TableSQL            VARCHAR(200)
DECLARE @TableName           VARCHAR(200)

SELECT @TableSQL = 'SELECT @columnsForInsertOUT = COALESCE(@columnsForInsertOUT' 
               + ''], ['', '''') 
               + name 
FROM MIGRATION_DICTIONARIES.dbo.' + @TableName + '_COLUMNS '

SET @ParmDefinition = '@columnsForInsertOUT varchar(400) OUTPUT'

EXECUTE sp_executesql
@TableSQL,
@ParmDefinition,
@columnsForInsertOUT=@columnsForInsert OUTPUT

SELECT @columnsForInsert
于 2013-05-09T10:28:11.347 に答える