2016-11-09 110 views
0

我有一个很大的脚本文件,我需要在另一台服务器上使用它。我需要使用Declare在开始时一次性编辑服务器的名称,这样我才能够通过更改变量的值来在多个服务器上使用相同的脚本。在MS Sql Server 2016中声明服务器名称为变量

类似的东西:

Declare @Quell nvarchar(100) 
SET @Quell = '[server1].[dbo]' 

SELECT * From @Quell.[Documents] 

,但没有奏效。

该怎么办?谢谢

+2

你只能使用动态SQL为此 – HoneyBadger

+0

您不能在SQL参数identifires。您可以使用动态sql,也可以使用具有查找和替换功能的文本编辑器来编辑文件,以便您只需单击一下即可更改每次出现的服务器名称。 –

+1

下面是[Microsoft动态SQL文档]的链接(https://msdn.microsoft.com/en-us/library/ms709342%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396)。另一种方法是使用[SSIS](https://msdn.microsoft.com/en-us/library/ms141026.aspx)遍历您的服务器,然后每次执行脚本。 –

回答

2

不幸的是,在SQL Server中不允许使用宏替换,但可以使用动态SQL。

Declare @Quell nvarchar(100) 
SET @Quell = '[server1].[dbo]' 

Declare @SQL varchar(max) 
SET @SQL = 'SELECT * From ' + @Quell +'.[Documents]' 
Exec(@SQL) 
1

如果您正在运行从SQL Server Management Studio中的脚本,你可以使用一个SQLCMD变量和运行SQLCMD模式下运行脚本(查询 - > SQLCMD模式)。还可以使用SQLCMD命令行实用程序执行SQLCMD脚本,并将变量值作为命令行参数传递。

示例脚本:

:SETVAR Quell "[server1].[dbo]" 

SELECT * From $(Quell).[Documents];