2017-06-22 140 views
0

目前正在使用可以更新鏈接服務器上的許多不同表的腳本。我使用08/12 SQL服務器管理工​​作室。SQL服務器鏈接的服務器更新

我遇到了一個問題,我試圖設置鏈接服務器字符串作爲變量,所以我可以在開始時設置此參數,並在需要時通過腳本進行參考。我一直在努力假設我可以聲明這是一個局部變量,因爲我的腳本的其他部分正在更新本地表/服務器,但是在運行腳本時,我會收到不正確的語法錯誤代碼我的鏈接服務器字符串變量位於。

我的代碼的結構爲:

declare @string varchar(max) 

set @string = '[server,instance].[database].dbo.table1' 

update @string 
set field = updatevariable 
where record = identifier 

是否有可能使用鏈接的服務器作爲一個變量?

+2

你必須使用動態sql ..看看吧 – maSTAShuFu

+2

@SandPiper粗魯是什麼?哪一部分對你萌芽不禮貌? – maSTAShuFu

+1

的確是@SandPiper。請證明你的陳述。 maSTAs的第一個評論是簡單的,但肯定不是無禮的。 –

回答

0

您可以動態構建SQL Update字符串,然後將其傳遞給exec。例如:

declare 
    @srv nvarchar(max) = N'[server].[db].[dbo].[table]', 
    @id int = 100, 
    @value nvarchar(max) = N'some value', 
    @sql nvarchar(max) 

set @sql = N'update ' + @srv 
     + ' set field = ''' + @value + ''' ' 
     + ' where record = ' + cast(@id as nvarchar) 

exec(@sql) 
+0

感謝您的示例。我理解代碼的基本構造,但是能否解釋這行代碼中的引號:+'set field ='''+ @value +''''。我假設他們有一個功能,然後刪除文本? –

+0

@GrantSDC我不明白你的意思是什麼「引號」,但是爲了看到構建的@ sql,你總是可以使用'print @ sql' – shibormot