2013-02-22 70 views
1

我已經通過Google和Stack Overflow進行了大量搜索,如果有答案,我還沒有能夠提出一個搜索查詢我正在尋找的答案。確定SQL Query是否具有命名參數的最佳方式

我正在構建一個函數模塊,用於在我的ASP.net網站中處理連接到Microsoft SQL Server數據庫並執行查詢的所有骯髒工作。我目前正在處理執行查詢的函數,並決定允許一個可選的函數參數,它是一個SQL參數數組。

在傳遞給它們的可選SQL參數的函數中,我想檢查傳遞的SQL查詢是否存在命名參數。如果在SQL查詢中有一個命名參數,請確保可選SQL參數確實通過。如果在SQL查詢中沒有命名參數,那麼確保沒有傳遞任何SQL參數。例如:

  • SQL查詢= SELECT * FROM MyTable WHERE ID = @TheID →函數調用必須有SQL參數。
  • SQL查詢= SELECT GETDATE() →函數調用不能有SQL參數。

我給大家出的問題有什麼是「搜索」是一個命名參數的SQL查詢字符串(不知道該參數的名稱)的最佳方式。我只是在字符串中搜索'@'字符時非常謹慎,因爲我在某處閱讀時可能會有一個以該字符命名的列(例如[[email protected]])。也許我可以使用正則表達式來搜索'=',然後搜索任意數量的空白,然後搜索'@'?

+0

我會用「LIKE

function checkQuery (byVal myQuery As String) return not instr(myQuery,"@") == 0 end function 

將返回true。 '* @ *'或LIKE'%@%',具體取決於您的通配符運算符(此時SQL服務器通配符運算符會滑入我的腦海)編輯:對於asp.net,使用instr()函數 – Scotch 2013-02-22 01:49:20

+0

使用'@@'作爲一些內置的系統函數的前綴 – 2013-02-22 07:40:21

+0

感謝Damien爲了提醒這一點儘管在編寫的代碼中這不太可能發生,我很高興檢查完整性和可靠代碼的所有可能性! – 2013-02-22 21:38:06

回答

0

沒有理由不能使用@這個字符。名稱中不應有@,因爲它是一個變量而不是列。你不能有一個變量名爲@([email protected])

退房sp_executesql。這是一個很好的例子,確實非常相似,你正在試圖做的

+0

我並不是說在參數名稱(變量名稱)中可能有一個「@」。我在說可能會有一個帶有@字符的列名,或者像@ aaron-bertrand暗示的那樣,SQL查詢中的內聯註釋。 – 2013-02-22 21:33:33

0

對於.NET是什麼東西,如果你的查詢中包含「@」

+0

如果我的查詢是'SELECT/* @foo */* FROM dbo.table;'或'SELECT [foo @ bar] FROM dbo。[my @ table];'?評論和錯誤的實體可能會導致誤報。 – 2013-02-22 02:37:14

+0

是的,他們會的。這和我所能提供的例子一樣簡單。如果你正在尋找非常具體的匹配,那麼你需要寫一個正則表達式。據我所知,這將是唯一的解決方案。 – Scotch 2013-02-22 03:11:05

相關問題