2016-06-07 80 views
0

我有兩個分離的環境(測試和生產)。每個環境都有兩臺服務器(istN和istG)。T-SQL動態鏈接服務器

而他們的鏈接服務器:

  • 測試(鏈接的服務器從ISTG到ISTN):TEST01 \ ISTN。 如果在查詢中使用的是:

    SELECT * FROM [test01\istn].MyDatabase.dbo.Table01

  • 生產(從ISTG鏈接服務器以ISTN)production01 \ ISTN 如果在查詢中使用的是:

    SELECT * FROM [production01\istn].MyDatabase.dbo.table01

我們使用的版本系統在每個環境(測試和生產)中部署相同的SQL腳本,無論環境如何:

那麼如何才能編寫一個可以在環境中使用的腳本? 有沒有一種獲得動態鏈接服務器的方法? 這樣的:

SELECT * FROM [@variable].MyDatabase.dbo.table01

感謝。

+0

你能說出environment_的鏈接服務器_regardless。 –

+0

不能這樣做。我不是整個基礎設施的所有者(這是一家銀行)。所以我必須遵守他們的規則。 – Beld86

+0

那麼你的方式是一個動態的SQL或有限的'視圖'的方法與聯合和服務器名爲列 –

回答

0

你可以嘗試這樣的,

DECLARE @linkedServer VARCHAR(50) = '' 

EXEC ('select * from openquery(' + @linkedServer + ', ''SELECT * FROM MyDatabase.dbo.Table01''') 
0

請使用以下查詢。在SQL Server的工作的罰款2012

DECLARE @LinkedServer VARCHAR(100) 
SET @LinkedServer ='production01\istn' 
EXEC('SELECT * FROM ['[email protected]+'].MyDatabase.dbo.table01') 

請使用以下是你需要在執行過程中獲取服務器名稱:

DECLARE @LinkedServer VARCHAR(100) 
SET @LinkedServer =(SELECT @@SERVERNAME) 
EXEC('SELECT * FROM ['[email protected]+'].MyDatabase.dbo.table01') 
+0

好吧,現在它可以工作。但是還有一個問題:如果我需要用更新語句構建存儲過程?我更新了另一臺服務器上的表格。 – Beld86

+0

對不起,我不明白你的要求。你可以解釋嗎? –

+0

我需要構建一個存儲過程(將在相同的自動發佈結構中發佈)。在SP中,我需要編寫更新聲明。是否可以使用您提供的相同說明?在另一臺服務器上找到要更新的表格(「已連接」的表格) – Beld86