我有一个很大的脚本文件,我需要在另一台服务器上使用它。我需要使用Declare在开始时一次性编辑服务器的名称,这样我才能够通过更改变量的值来在多个服务器上使用相同的脚本。在MS Sql Server 2016中声明服务器名称为变量
类似的东西:
Declare @Quell nvarchar(100)
SET @Quell = '[server1].[dbo]'
SELECT * From @Quell.[Documents]
,但没有奏效。
该怎么办?谢谢
我有一个很大的脚本文件,我需要在另一台服务器上使用它。我需要使用Declare在开始时一次性编辑服务器的名称,这样我才能够通过更改变量的值来在多个服务器上使用相同的脚本。在MS Sql Server 2016中声明服务器名称为变量
类似的东西:
Declare @Quell nvarchar(100)
SET @Quell = '[server1].[dbo]'
SELECT * From @Quell.[Documents]
,但没有奏效。
该怎么办?谢谢
不幸的是,在SQL Server中不允许使用宏替换,但可以使用动态SQL。
Declare @Quell nvarchar(100)
SET @Quell = '[server1].[dbo]'
Declare @SQL varchar(max)
SET @SQL = 'SELECT * From ' + @Quell +'.[Documents]'
Exec(@SQL)
如果您正在运行从SQL Server Management Studio中的脚本,你可以使用一个SQLCMD变量和运行SQLCMD模式下运行脚本(查询 - > SQLCMD模式)。还可以使用SQLCMD命令行实用程序执行SQLCMD脚本,并将变量值作为命令行参数传递。
示例脚本:
:SETVAR Quell "[server1].[dbo]"
SELECT * From $(Quell).[Documents];
你只能使用动态SQL为此 – HoneyBadger
您不能在SQL参数identifires。您可以使用动态sql,也可以使用具有查找和替换功能的文本编辑器来编辑文件,以便您只需单击一下即可更改每次出现的服务器名称。 –
下面是[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)遍历您的服务器,然后每次执行脚本。 –