Sql-Server

為什麼要避免在儲存過程中使用動態 SQL?

  • June 4, 2021

我聽說它說你不想使用動態 SQL。你能給我一些具體的或現實生活中的例子嗎?

就個人而言,我在我的數據庫中多次使用它進行編碼。我認為它是可以的,因為它的靈活性。

我的猜測是關於 SQL 注入或性能。還要別的嗎?

如果必須,使用動態 SQL 沒有任何問題。事實上,在某些情況下,這是您唯一的選擇。建議不要使用它,因為是的,如果您的輸入未經過清理,它可能會導致 SQL 注入,並且是的,在經常呼叫的模組中使用動態 SQL 可能會損害其性能。

我不認為本身有一個具體的例子,但我會這樣說:在首先使用正常查詢和語句之後嘗試實現你的目標 - 只有在你用盡所有其他途徑後才能動態地做到這一點。請記住,執行動態 SQL 字元串是在呼叫它的模組的單獨使用者會話中完成的 - 因此您可能會遇到您不期望的權限問題。

如果您擔心性能;測試它。如果您擔心安全性;驗證您的輸入。沒有對錯之分——只有您根據當時可用的資訊和工具做出最佳判斷。

動態 SQL 是一種工具。作為一種工具,它有一些應用——例如,對於行政工作來說,它是一種祝福。

在應用程序使用的 SP 上不太好,特別是如果您沒有管理生成程式碼的參數化(最新版本的 SQL Server 減少了問題,但仍然有效)。

這裡就不詳細介紹了,所以推荐一篇關於動態 SQL 問題的優秀文章: MVP Erland Sommarskog的 The Curse and Blessings of Dynamic SQL

引用自:https://dba.stackexchange.com/questions/22932