我具有由一個存儲過程包裹此SQL函數問題:SQL SERVER - 與COALESCE()函數
ALTER FUNCTION dbo.GetObjList
(
@filterUID int = NULL,
@filterSID varchar(32) = NULL
)
RETURNS TABLE
AS
RETURN
SELECT ROW_NUMBER() OVER (ORDER BY UID) AS [RowNumber], *
FROM ObjTable
WHERE
(COALESCE(@filterUID, @filterSID) IS NULL) OR
(
((@filterUID IS NOT NULL) AND (UID = @filterUID)) OR
((@filterSID IS NOT NULL) AND (SID = @filterSID))
)
爲什麼要收到這樣的錯誤:「轉化轉換VARCHAR值'時失敗abc'到數據類型int。「如果我只通過@filterSID = 'abc'
作爲參數(和其他人的默認值)?
我注意到COALESCE對錯誤負責。
編輯:現在,我得到了錯誤的原因......並給了我其實有很多params的事實...你們會推薦什麼解決方案?
認同這一點,並希望它不會事實證明,兩個參數只是一個例子,實際上有二十個參數(因此使用COALESCE的想法可能起源於此)... – 2011-06-15 19:26:36
感謝您的快速響應......並且Andriy說: ...我在那裏有很多參數,認爲使用COALESCE來實現這一點很好。我應該避免使用它嗎? – Learner 2011-06-16 10:03:28
@Cristi - 如果你想使用COALESCE,我會爲每個數據類型使用一個COALESCE表達式(例如,把你所有的varchar參數放在一個COALESCE中,所有的ints放入另一個),並且它不會嘗試執行任何操作類型轉換。 – 2011-06-16 10:24:36