삽입 문의 대상 데이터베이스 이름에서 변수를 사용하는 방법은 무엇입니까?

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 '.'.
도움이 되었습니까?

해결책

나는 전에이 문제를 겪었고 내가 찾은 유일한 작업은 Dynamic 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로 syncronize하고 다른 데이터베이스를 구성 옵션으로 사용하고 동의어를 사용한다는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top