Lea*_*ner 2 sql-server coalesce sql-function
我有这个SQL函数,它由一个存储过程包装:
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))
)
Run Code Online (Sandbox Code Playgroud)
为什么我会收到这样的错误:"将varchar值'abc'转换为数据类型int时转换失败." 如果我只@filterSID = 'abc'
作为参数传递(和其他人的DEFAULT)?
我注意到COALESCE负责这个错误.
编辑:现在我得到了错误的原因...并且考虑到我实际上有很多参数...你们会推荐什么作为解决方案?
退货类型
返回具有最高数据类型优先级的表达式的数据类型.如果所有表达式都不可为空,则结果将输入为nonnullable.
(重点补充).int的优先级高于varchar,因此返回类型COALESCE
必须是int类型.显然,你的varchar值不能这么转换.
您可以简单地将where子句重写为:
WHERE
(@filterUID IS NULL AND @filterSID IS NULL) OR
(@filterUID IS NOT NULL AND UID = @filterUID) OR
(@filterSID IS NOT NULL AND SID = @filterSID)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9834 次 |
最近记录: |