Как использовать переменную в имени целевой базы данных для оператора вставки?

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

  •  05-07-2019
  •  | 
  •  

Вопрос

Я хочу объявить имя сервера и использовать это имя в операторе вставки. Пока что я получил только сообщение об ошибке.

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