2011-08-03 106 views
-1

我在創建存儲過程的動態參數時遇到問題。 我在存儲過程中有兩個nvarchar參數,這些參數是用逗號分隔的單詞的組合。 例如:存儲過程的動態參數

'Login, check, take, return' and 'admin, yes, no, yes' 

我必須包括where子句中這些參數,如

login=admin and check=yes and take=no and return=yes 

的問題是,在參數的字的數量是動態的。它可以從1到20個字不等。

有沒有解決方案來處理這個問題?

回答

2
  • 定義20個參數值爲NULL默認
  • 只有設置要
  • 在where子句(@Param IS NULL or Column = @Param)

如果你有完全動態的SQL和隨機參數名稱那麼它是一個的那些

  • 你不應該使用存儲過程
  • 你需要爲不同的用例寫更多的存儲過程

你不會有一個完全動態的.net方法嗎?

+0

烏爾可變我想用20個參數是不是一個好辦法和ofcourse我越來越這些參數爲逗號分隔字符串。只有兩個參數在那裏。 – Mukesh

+1

你認爲解析一個CSV與20個參數相比有多醜? – gbn

0

您必須在存儲過程中創建動態SQL查詢。在存儲過程中,您必須拆分參數和值,並在條件下構建動態。

+0

是的,我可以使用函數分割兩個參數。但我可以在哪裏拯救它?我可以將它保存爲一個數組嗎?如何將它包含在where條件中。 – Mukesh

0

您必須保存存儲過程中的變量。

E.g.

@sql as nvarchar(1000) 
@sql = 'select * from tablename where' 

現在你遍歷像

@sql = @sql +' '+ @firstvariable + ' = '''+ @valuevariable +'' AND '