iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 10
1
Data Technology

SQL Server 學習日誌系列 第 10

10. 動態組合 SQL 與執行語法 - sp_executesql

  • 分享至 

  • xImage
  •  

前言

本篇文章圖片毀損,完整版請參考:https://dog0416.blogspot.com/2020/10/sql-spexecutesql.html

個人接觸到動態組合與執行 SQL 方法,主要在執行 SP 階段,必須動態取得的不同資料庫名稱 (同主機),故執行跨資料庫存取資料的時候需要動態語法。實際上若並非必要,個人不太喜歡動態組合語法,主因是非常的難以測試,尤其是執行非常長的語法,讓除錯的困難度增加不少。


介紹

我們先來介紹簡單使用 sp_executesql,我們的情境案例為替換掉資料庫名稱即可。首先要執行的語法設定為字串

DECLARE @query NVARCHAR(MAX) = N'
 SELECT *
   FROM [Study4TW].[dbo].[Activity];'

SET @query = REPLACE(@query,N'[Study4TW]','[DIStudio]');

EXEC SP_EXECUTESQL @query;   

https://d2mxuefqeaa7sj.cloudfront.net/s_91125A879B1FDA73F48F01B2DA0DD09CDEF7EAFF5076A733D53352576240D039_1514474912771_image.png

若需要帶入參數,語法為

EXEC SP_EXECUTESQL 執行語法, 帶入參數型態, 帶入參數;
DECLARE @query NVARCHAR(MAX) = N'
 SELECT *
   FROM [Study4TW].[dbo].[Activity]
  WHERE Id = @id ;'

EXEC SP_EXECUTESQL @query, N'@id int', @id = 1;

https://d2mxuefqeaa7sj.cloudfront.net/s_91125A879B1FDA73F48F01B2DA0DD09CDEF7EAFF5076A733D53352576240D039_1514475610350_image.png

依據官方網站的建議:

sp_executesql 會比 EXECUTE 更具有多變性;同時由於 sp_executesql 所產生的執行計畫更能讓 SQL Server 重複使用,因此 sp_executesql 也會比 EXECUTE 更有效率 (參考資料 1)

故建議使用 sp_executesql 代替直接使用 EXECUTE


參考資料

  1. 使用 sp_executesql - https://technet.microsoft.com/zh-tw/library/ms175170(v=sql.105).aspx

上一篇
09.[WHERE] 條件為 NULL 時回傳所有資料,非 NULL 時回傳符合條件資料
下一篇
11.TRANSACTION ISOLATION LEVEL
系列文
SQL Server 學習日誌30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言