2013-03-22 72 views
0

是否可以使用SQL Server 2012創建返回可變長度nvarchar的標量值函數?當我說可變長度時,我希望函數接受任意長度的nvarchar,並返回長度相同的nvarchar具有標量值函數的可變長度NVARCHAR

我想創建一個幫助函數,在將它們放入我們的數據倉庫前,使用視圖清理nvarchar列。我很肯定這是不可能的,如果我錯了,請糾正我。

我現在的功能(顯然不工作,由於截斷等):

create function dbo.fnClean (@input nvarchar) 
returns nvarchar as 
begin 
    declare @return nvarchar 

    set @return = ltrim(rtrim(@input)) 

    return @return 
end 

回答

0

不,這是不可能的(並且你需要動態SQL來創建列或轉換對這樣另一邊)。但是,如果您事先知道長度是多少,那麼您可以單獨跟蹤,而不是依賴該功能。或者使用一個表值函數返回@inputLEN(@input)

最後,如果這是所有這個功能正在做的事情,它將會非常昂貴。通過將LTRIM(RTRIM())應用於輸入而不需要創建或引用某個函數,您不會得到什麼結果?標量函數對於性能並不太好。

+0

感謝您確認我的懷疑,並給我關於性能考慮和潛在解決方案的指導。我只是要硬編碼我使用的每個視圖中的邏輯。 – Jondlm 2013-03-23 23:16:10

0

這不會起作用,雖然我會質疑目標nvarchar或varchar已經佔用變量空間......我已經在ETL中編寫了腳本,可以計算出最大數據類型並縮放列結果。但是,如果您對數據類型和空間(特別是小數點和不具有企業級的豪華感)保持謹慎的話。你的目標是什麼?

+0

目標是在將列加載到我們的數據倉庫之前,隔離並集中清理列所需的邏輯。由於我在20多個視圖中使用了相同或相似的邏輯,因此我認爲將它放入函數是有意義的。我只是要硬編碼它。謝謝! – Jondlm 2013-03-23 23:14:54