OPENQUERY ( linked_server ,'query' )
這是代表連結伺服器名稱的識別碼。
這是在連結伺服器中執行的查詢字串。 該字串的最大長度是 8 KB。
--OPENQUERY的基本用法
SELECT * FROM OPENQUERY([SANDY-VAIO] ,'SELECT * FROM Northwind.dbo.Customers')若要傳遞變數,使用以下寫法將出現錯誤
--傳遞變數(錯誤寫法) DECLARE @TSQL varchar(8000), @VAR char(2) SELECT @VAR = 'A%' SELECT * FROM OPENQUERY([SANDY-VAIO] ,'SELECT * FROM Northwind.dbo.Customers WHERE CustomerID Like '''+ @VAR + '' ) --傳遞變數(正確寫法) DECLARE @TSQL varchar(8000), @VAR char(2) SELECT @VAR = 'A%' SELECT @TSQL = 'SELECT * FROM OPENQUERY([SANDY-VAIO] ,''SELECT * FROM Northwind.dbo.Customers WHERE CustomerID Like ''''' + @VAR + ''''''')' EXEC (@TSQL) GO若要避免多重層級的引號可利用sp_executesql 預存程序
--使用 Sp_executesql 預存程序 DECLARE @VAR char(2) SELECT @VAR = 'A%' EXEC [SANDY-VAIO].master.dbo.sp_executesql N'SELECT * FROM Northwind.dbo.Customers WHERE CustomerID Like @state', N'@state char(2)', @VAR
依照資料表名稱的相同方式,在查詢的 FROM 子句中參考 OPENQUERY,即可取得資料集。這是大部分的使用者常用的方式,很少人會想到OpenQuery也可以拿來執行T-SQL與法中的新增刪除修改。關於這部分可參考:線上說明的範例。以下內容則是簡單列出網路上搜尋到的範例
--**************************** --* Example 1 --* Import all users into new table --*****************************/ SELECT *INTO dbo.Users_Import FROM OPENQUERY(remotelinkedservername, 'SELECT * FROM dbo.Users' ) --**************************** --* Example 2 --* Insert users that do not exist --* into existing table --*****************************/ INSERT INTO dbo.Users( UserID, UserName, FirstName, LastName) SELECT UserID, UserName,FirstName,LastName FROM OPENQUERY(remotelinkedservername, 'SELECT * FROM dbo.Users' ) ru WHERE NOT EXISTS ( SELECT 1 FROM dbo.Users WHERE UserID = ru.UserID ) --/**************************** --* Example 3 --* Insert results from remote procedure --* into new table --*****************************/ SELECT *INTO dbo.List FROM OPENQUERY(remotelinkedservername, 'set fmtonly off exec dbo.GetList')
補充:
若使用Sp_executesql出現以下錯誤訊息,請執行下列語法
訊息 7411,層級 16,狀態 1,行 3
並未為 RPC 設定伺服器 'SANDY-VAIO'。
EXEC sp_serveroption @server=N'SANDY-VAIO', @optname=N'rpc', @optvalue=N'true' GO EXEC sp_serveroption @server=N'SANDY-VAIO', @optname=N'rpc out', @optvalue=N'true' GO或手動修改連結物件的屬性
參考:
http://support.microsoft.com/kb/314520/zh-tw
blog.sqlauthority.com
http://sqlserverplanet.com/tsql/using-openquery
How to Add a Linked Server
Using OpenQuery
如何在 SQL 2005 中設定連結的伺服器(Linked Server)
全站熱搜