歡迎您光臨本站 註冊首頁

使用EXEC AT在遠程SQL Server上執行動態SQL

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0
在這個技巧中,我將簡短地介紹OPENQUERY和OPENROWSET表函數、它們的局限以及新的EXEC AT命令如何解決這些局限.

  專家解答

  OPENQUERY表函數在指定的鏈接伺服器上執行指定的傳遞查詢.這個伺服器是一個OLE DB數據源.OPENQUERY可以在一個查詢的FROM從句中引用,就好像它是一個表名.OPENQUERY也可以在一個INSERT、UPDATE或者DELETE語句的目標表中引用.雖然這個查詢會返回多個結果集,OPENQUERY只返回第一個結果集.

  使用OPENQUERY的問題在於:首先,它不接受本身變數的變數,換句話說,它必須是靜態的(雖然這裡有一個解決它的技巧),其次,只有一個結果集返回,第三,OPENQUERY只在FROM從句中使用,當你需要調用一個可執行語句時,例如針對目標伺服器的DDL語句,這就變得非常限制.類似的限制也適用於OPENROWSET表函數.

  SQL Server 2005引入了一個改進 – EXEC命令允許你在鏈接伺服器上執行動態SQL.新的EXEC AT命令解決了OPENQUERY和OPENROWSET上述的限制.EXEC AT指定command_string針對linked_server_name執行,如果有結果的話,那麼結果返回給用戶.linked_server_name必須參照本地伺服器上的現有鏈接伺服器.

  例子

  那麼現在讓我們看看怎麼使用這個新的命令.在下面給定的表中,

  腳本1創建了FARAWAYSERVER伺服器的鏈接伺服器定義.

  腳本2在一個返回單個結果集的鏈接伺服器上執行一個簡單的SELECT語句.

  腳本3在鏈接伺服器上執行兩個SELECT語句,因此兩個結果集返回給用戶.

  腳本4在鏈接伺服器上執行一個SELECT語句並且在運行時間內動態傳遞兩個變數.

  腳本5使用腳本4,但是這次它使用變數在運行時間內動態傳遞變數值.

  腳本6在鏈接伺服器上執行可執行的代碼,在這個例子中,它在鏈接伺服器的tempdb上創建一張表.



  腳本7刪除這個會話中創建的所有對象.

  腳本: EXEC AT 命令

  --腳本 1 : 創建一個鏈接伺服器

  EXEC sp_addlinkedserver 'FARAWAYSERVER', 'SQL Server'

  --腳本 2 : 在鏈接伺服器上執行一個簡單的SELECT語句

  

EXEC ('SELECT TOP 10 * FROM AdventureWorksLT.SalesLT.Customer') AT [FARAWAYSERVER];
  GO


[火星人 ] 使用EXEC AT在遠程SQL Server上執行動態SQL已經有980次圍觀

http://coctec.com/docs/linux/show-post-58596.html