2012-06-12 71 views
1

有沒有辦法將列名作爲參數傳遞給函數?將列名作爲參數傳遞?

我想創建一個函數,根據列過濾值,但我將這個列名稱傳入函數(理想情況下是一個字符串)?

我做了嘗試,但我宣佈列名稱爲varchar,顯然這不會工作!

+1

這必須是重複的。 – usr

+2

您可以將字段名稱作爲字符串確定。但是你不能在函數中使用動態SQL,所以你需要條件邏輯來處理所有的情況。 –

+0

您可能可以在CLR編譯的用戶函數中執行此操作,但這是一大堆工作,可能不會很好地利用您的時間。 –

回答

6

簡短回答:不可以。

唯一的方法就是使用動態SQL。建立一個以字段/表名作爲參數的存儲過程並不常見,並且構建一個新的SQL語句來執行。

但是,函數不能執行動態SQL。


可以是錯誤指向設計的指示。如果你詳細說明爲什麼你需要這個,我們可能會提供替代設計,根本不需要它。

或者,您可能更適合使用存儲過程而不是函數。


使用OR條件鏈不也滿足了像您描述的想法。但它通常會產生非常糟糕的計劃。我會查找我的有用鏈接,以解釋爲什麼以及如何處理它;它非常深入,但非常好知道。

編輯這裏的鏈接:Dynamic Search Conditions in T-SQL

2

你能做到這一點在某些動態SQL,在那裏你建立在飛行的查詢,或者如果你有場數量有限,你可以做類似

select * from table where 
(param = 'field1' and field1 = value) 
or (param = 'field2' and field2 = value)