2011-04-11 56 views
3

在T-SQL中有可能使用表值函數返回一個具有可變列數的表嗎?
列名可能只是1, 2, …, n在具有可變列數的T-SQL返回表中擁有表值函數

現在我有一個「字符串拆分」函數,它返回一個單列的表1 x n,然後我將錶轉換爲一個n x 1表,但我寧願通過返回正確的表格格式來簡化過程用。我想打算在C#中使用CLR過程來實現這個功能,我只是不知道如何設置用戶定義的函數來以我想要的格式返回數據:可變數量的列,依賴項在輸入字符串上。

回答

1

無論是用T-SQL還是.NET/SQLCLR編寫,都無法從表值函數(TVF)返回非靜態結果集。只有存儲過程可以動態創建結果集。

基本上,任何函數都需要返回一致的結果類型,不管它是標量值還是集合(即結果集)。

但是,在SQLCLR存儲過程中,您可以通過SqlMetaData創建動態結果集。只要你沒有明確的需求SELECT ... FROM它,那麼可能存儲過程將工作。

當然,您也可以在T-SQL中使用動態SQL來構建基於split函數輸出的SELECT語句。

很多這一切歸結爲需要使用此功能的確切環境。

+0

我知道如何使用SqlMetaData在CLR存儲過程中創建結果集,但是對於用戶定義的函數,這也是可能的嗎? – 2011-04-12 10:45:40

+1

不,SqlMetaData僅適用於存儲過程。正如我在答覆中所提到的,不管語言如何,函數都必須返回一致/預定義的類型。對於CLR函數,您可以定義一個結構來傳回數據以及函數裝飾器中的表定義。沒有辦法讓這些地方變得動態。如果你可以做一個功能結果集動態的,我會喜歡它,但那不會發生。 – 2011-04-12 12:41:09

相關問題