有沒有辦法將列名作爲參數傳遞給函數?將列名作爲參數傳遞?
我想創建一個函數,根據列過濾值,但我將這個列名稱傳入函數(理想情況下是一個字符串)?
我做了嘗試,但我宣佈列名稱爲varchar,顯然這不會工作!
有沒有辦法將列名作爲參數傳遞給函數?將列名作爲參數傳遞?
我想創建一個函數,根據列過濾值,但我將這個列名稱傳入函數(理想情況下是一個字符串)?
我做了嘗試,但我宣佈列名稱爲varchar,顯然這不會工作!
簡短回答:不可以。
唯一的方法就是使用動態SQL。建立一個以字段/表名作爲參數的存儲過程並不常見,並且構建一個新的SQL語句來執行。
但是,函數不能執行動態SQL。
這可以是錯誤指向設計的指示。如果你詳細說明爲什麼你需要這個,我們可能會提供替代設計,根本不需要它。
或者,您可能更適合使用存儲過程而不是函數。
使用OR
條件鏈不也滿足了像您描述的想法。但它通常會產生非常糟糕的計劃。我會查找我的有用鏈接,以解釋爲什麼以及如何處理它;它非常深入,但非常好知道。
你能做到這一點在某些動態SQL,在那裏你建立在飛行的查詢,或者如果你有場數量有限,你可以做類似
select * from table where
(param = 'field1' and field1 = value)
or (param = 'field2' and field2 = value)
這必須是重複的。 – usr
您可以將字段名稱作爲字符串確定。但是你不能在函數中使用動態SQL,所以你需要條件邏輯來處理所有的情況。 –
您可能可以在CLR編譯的用戶函數中執行此操作,但這是一大堆工作,可能不會很好地利用您的時間。 –