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)
文章標籤
全站熱搜

為什麼要用OPENQUERY呢. 直接不QUERY呢? 速度會比較快嗎? SELECT * FROM [SANDY-VAIO].Northwind.dbo.Customers