我具有由一个存储过程包裹此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