2013-08-30 74 views
1

實質上,我希望能夠創建一個接受可變數量參數的標量函數,並將它們連接在一起以返回單個VARCHAR。換句話說,我希望能夠在不確定數量的變量上創建一個摺疊,並將摺疊的結果作爲VARCHAR返回,類似於C#中的.Aggregate或Common Lisp中的Concatenate。無限可選參數

用於這種功能我的(程序)的僞代碼如下:

  1. 限定VARCHAR可變
  2. 的foreach非空參數將其轉換爲VARCHAR,並將其添加到VARCHAR可變
  3. 返回VARCHAR變量作爲函數的結果

在MS-SQL中是否有這樣的地道方式? MS-SQL Server有類似於C#params/Common Lisp & rest關鍵字嗎?

- 編輯 -

是否有可能做類似這樣的不使用表值參數的東西,這樣對函數的調用可能看起來像:

MY_SCALAR_FUNC(「A」, NULL,'C',1)

而不是每次調用該函數時都必須經過設置和插入到新的臨時表中。

回答

1

對於一組項目,您可以考慮將值表傳遞給您的函數?

Pass table as parameter into sql server UDF

又見http://technet.microsoft.com/en-us/library/ms191165(v=sql.105).aspx

直接回答你的問題,沒有,沒有等同於params關鍵字。我將使用的方法是上面的方法 - 創建一個用戶定義的表類型,爲每個值填充一行,並將其傳遞給您的標量函數進行操作。

編輯:如果你想避免表參數,並且是在SQL 2012,看看CONCAT功能:

http://technet.microsoft.com/en-us/library/hh231515.aspx

CONCAT (string_value1, string_value2 [, string_valueN ]) 

這僅僅是內置CONCAT功能, 「params」風格的聲明無法實現自己的功能。

+0

對不起,我應該更清楚。我特別希望避免使用表值參數,我會更新問題以使其更清晰。 –

+0

@BenH我編輯了一個選項,只適用於字符串連接,並且只在SQL 2012上有幫助嗎? – Meff

+0

這確實有幫助,謝謝Meff。這讓我想知道他們是如何實現這個功能的。我們並沒有將2012用於這個特定的項目,但我們對其他人並不瞭解,因此謝謝。 –