在 Azure Synapse Analytics 中針對專用 SQL 集區使用預存程序

本文提供藉由實作預存程序來開發專用 SQL 集區解決方案的提示。

預期的情況

專用 SQL 集區支援許多在 SQL Server 中使用的 T-SQL 功能。 更重要的是有相應放大的特定功能,您可用來將解決方案效能最大化。

此外,為了協助您維護專用 SQL 集區的規模和效能,還有其他有行為差異的特性和功能可供運用。

預存程序簡介

預存程序很適合用來封裝您的 SQL 程式碼,其儲存位置很接近您的專用 SQL 集區資料。 藉由將程式碼封裝成可管理的單位,預存程序也可協助開發人員將其解決方案模組化,讓程式碼更有利於重複使用。 每個預存程序也可接受參數,使其更具彈性。

專用 SQL 集區提供簡化而精簡的預存程序實作。 相較於 SQL Server,最大差異是預存程序不是預先編譯的程式碼。

一般就資料倉儲而言,相較於針對大型資料磁碟區執行查詢所花費的時間,編譯時間很少。 更重要的是,務必要針對大型查詢最佳化預存程序程式碼。

提示

目標是要節省時數、分鐘數和秒數,而不是毫秒數。 因此,將預存程序視為 SQL 邏輯的容器將有所幫助。

當專用 SQL 集區執行預存程序時,SQL 陳述式會在執行階段進行剖析、轉譯和最佳化。 在此過程中,每個陳述式都會轉換為分散式查詢。 針對資料執行的 SQL 程式碼與提交的查詢不同。

巢狀預存程序

當預存程序呼叫其他預存程序或執行動態 SQL 時,內部預存程序或程式碼叫用據稱就是巢狀。

專用 SQL 集區最多支援八個巢狀層級。 SQL Server 中的巢狀層級則為 32。

最上層預存程序呼叫等同於巢狀層級 1。

EXEC prc_nesting

如果預存程序也會進行另一個 EXEC 呼叫,這會將巢狀層級提高到二。

CREATE PROCEDURE prc_nesting
AS
EXEC prc_nesting_2  -- This call is nest level 2
GO
EXEC prc_nesting

如果第二個程序接著會執行一些動態 SQL,巢狀層級會提高到三。

CREATE PROCEDURE prc_nesting_2
AS
EXEC sp_executesql 'SELECT 'another nest level'  -- This call is nest level 2
GO
EXEC prc_nesting

專用 SQL 集區目前不支援 @@NESTLEVEL。 因此,您需要追蹤巢狀層級。 您不太可能會超過八個內嵌層級的限制。 但若超過,您就必須修改程式碼,以符合此限制內的內嵌層級。

INSERT..EXECUTE

專用 SQL 集區不允許您透過 INSERT 陳述式取用預存程序的結果集。 但有替代方法可供使用。 如需範例,請參閱暫存資料表上的文章。

限制

在專用 SQL 集區中不會實作 Transact-SQL 預存程序的某些層面,如下所示:

  • 暫存預存程序
  • 編號預存程序
  • 擴充預存程序
  • CLR 預存程序
  • 加密選項
  • 複寫選項
  • 資料表值參數
  • 唯讀參數
  • 預設參數
  • 執行內容
  • return 陳述式

下一步

如需更多開發秘訣,請參閱開發概觀