1

動的スクリプトを実行して変数を返そうとしているので、スクリプトの残りの部分に渡すことができます。Google の助けを借りていくつかの方法がありますが、まだ正しい構文が得られていないと思うため、エラーまたは null 値が返されます。

誰かが私がどこで間違っているか教えてください。

例: 変数 @table_name の値を返すには ASIA はデータベースであり、これはテーブルから取得されたテーブル名に追加される変数として設定され、T5148 はテーブルからの ID であり、テーブル名をそのまま変換します。変数。他のスクリプトがループしているときにこのスクリプトが座っているので、これを変数に設定しました

ありがとうございました

declare @table_name nvarchar(50)
declare @database nvarchar(50)
declare @id nvarchar(50)
declare @sql nvarchar(max)

set @database = 'ASIA'
set @id = 'T5178'

set @sql = N'SELECT @table_name = ''@database''+table_name 
    FROM ''@database''+tables (NOLOCK)
    WHERE id = ''@id'''

exec sp_executesql @sql, N'@table_name nvarchar(50) output', @table_name   output

select @TRAN_TABLE
4

1 に答える 1

2

私が間違っていなければ、これはあなたが必要とするものです:

DECLARE @table_name NVARCHAR(50)
DECLARE @database NVARCHAR(50)
DECLARE @id NVARCHAR(50)
DECLARE @sql NVARCHAR(MAX)

SET @database = 'ASIA'
SET @id = 'T5178'

SET @sql = N'SELECT @table_name = table_name 
    FROM ' + @database+'.dbo.tables (NOLOCK)
    WHERE id = @id'

EXEC SP_EXECUTESQL  @sql, N'@id nvarchar(50),@table_name nvarchar(50) output', 
                    @id = @id, @table_name = @table_name OUTPUT

SET @table_name = @database + @table_name

注:スキーマ名としてdboを変更してください。

于 2015-07-02T06:58:48.773 に答える