insertステートメントのターゲットデータベース名に変数を使用する方法は?

StackOverflow https://stackoverflow.com/questions/1802692

  •  05-07-2019
  •  | 
  •  

質問

サーバー名を宣言し、この名前をinsertステートメントで使用します。これまでのところ、エラーメッセージのみが表示されます。

declare @machine nvarchar(6);
declare @bar nvarchar(3);
set @machine = 'Name00';
set @bar = 'foo'

insert into @machine.dbname.dbo.table (column1, column2)
select (column1, column2)
from table
where column1 = @bar

これにより、次のことがわかります。

Msg 102, Level 15, State 1, Line 6
Incorrect syntax near '.'.
役に立ちましたか?

解決

私は以前にこの問題を経験しましたが、私が見つけた唯一の回避策は動的SQLです

declare @machine nvarchar(6)
declare @bar nvarchar(3)
declare @sql varchar(2000)
set @machine = 'Name00'
set @bar = 'foo'


Set @sql ='insert into ' + @machine + '.dbname.dbo.table (column1, column2)
select (column1, column2)
from table
where column1 = ''' + @bar + ''''

--print (@sql)
exec (@sql)

他のヒント

これには動的SQLを使用する必要があります。次を試してください:

declare @machine nvarchar(6);
declare @bar nvarchar(3);
declare @query nvarchar(4000)


set @machine = 'Name00';
set @bar = 'foo'

set @query = 'insert into ' + @machine + '.dbname.dbo.table (column1, column2) select (column1, column2) from table where column1 = ''' + @bar + ''''

execute dbo.sp_executesql @query

同じソースデータベースから異なるデータベースに挿入する必要がある場合は、他の人が言うように動的SQLを使用します。

ただし、問題がdevserver1をdevserver2と同期し、prodserver1とprodserver2を同期させ、他のデータベースを設定オプションとして使用する場合、シノニムを使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top