2010-11-15 21 views
4

是否可以對T-SQL模塊(函數,過程)中的參數使用某種反射?對參數的T-SQL反射

procedure x(@foo nvarchar(max),@bar nvarchar(max)) ... 
set @foo = isnull(@foo,0); 
set @bar = isnull(@bar,0); 

是否有可能迭代我的參數並將其值設置爲循環?或者我需要爲此使用SQLCLR嗎?

+0

只是想知道爲什麼你需要這樣的東西。當然聲明可選參數就足夠了(並且「if」語句可以增加您擁有的任何邏輯要求)。 – Oded 2010-11-15 15:44:40

+0

@Oded - 因爲我懶得爲10個參數輸入一些東西:-) – Axarydax 2010-11-15 16:40:49

回答

5

如果你有太多的參數需要編程枚舉它們,那麼你可能有太多的參數!也許切換到另一種數據結構,如表值參數或XML文檔會給你一個更簡潔的方式來獲取如此複雜的數據到你的程序/函數中?但是,如果你有一些非常特殊的需求,那麼看看sys.parameters(假設你使用的是SQL Server 2005或更高版本)。

+0

太棒了!從sys.parameters中選擇sys.parameters.name加入sys.schemas加入sys.all_objects ...至少給出參數的名稱。 – Axarydax 2010-11-15 16:39:37

0

我不知道的任何直接的方式,但你可能會發現過程

sp_executesql 

有用的,它就像大多數interpretted語言exec函數(從「字符串」運行代碼)。可能不是最安全或最流行的答案,但它可能是強大的。你究竟想要做什麼?至於你到目前爲止所說的話,我無法真正做得太具體(甚至肯定這會有所幫助!)。

http://blogs.msdn.com/b/pnayak/archive/2007/05/03/how-to-use-parameter-in-tsql-to-actually-use-it-as-identifier-rather-than-the-value.aspx