我有一个脚本,其中包含许多连接到各种链接服务器的select into语句。
我希望能够多次运行该脚本,但在每种情况下,服务器和数据库都会发生变化,并且会有一些表名称发生变化。
我希望使用变量在beiginning中定义服务器一次,如下所示,但当然它们超出了范围,因为它们只是局部变量。
declare @table_that_changes varchar(100)
declare @linked_server1 varchar(20)
declare @linked_server2 varchar(20)
declare @DB_onserver1 varchar(100)
declare @DB_onserver2 varchar(100)
select @linked_server1 = '[server109]',
@linked_server2 = '[server104]',
@DB_onserver1 = '[database203434]',
@DB_onserver2= '[database416541]',
@table_that_changes = 'LossTable_2191'
存储这些值的最佳方法是什么,所以我可以做(例如)等效的
select * from @linked_server1.@DB_onserver1.dbo.table1
是否适用于包含大量select语句的脚本?
答案 0 :(得分:0)
不完全是你想要的,但是一种方法是使用动态sql(未测试)来远程服务器对表的脚本进行脚本编写
declare @table_that_changes varchar(100)
declare @linked_server1 varchar(20)
declare @linked_server2 varchar(20)
declare @DB_onserver1 varchar(100)
declare @DB_onserver2 varchar(100)
select @linked_server1 = '[server109]',
@linked_server2 = '[server104]',
@DB_onserver1 = '[database203434]',
@DB_onserver2= '[database416541]',
@table_that_changes = 'LossTable_2191'
declare @sql varchar(1000)
set @sql = 'create view linked1.table1 as select * from ' +
@linked_server2 + '.' + @DB_onserver1 + '.table1'
exec( @sql)
答案 1 :(得分:0)
虽然您已经接受了另一个答案,但SQLCMD scripting variables旨在完全处理此类任务。
答案 2 :(得分:-1)
除非脚本中有GO,否则变量应保留在整个脚本的范围内。我的猜测是你有一个或多个GO重新启动语句并清除任何指定的变量。