2016-11-09 107 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];