2014-10-09 60 views
0

我在2012年SSMS的工作,我有以下标量UDF:标量UDF不返回预期值

CREATE FUNCTION [dbo].[test] (@input nvarchar) 
RETURNS nvarchar 
AS 
BEGIN 
    DECLARE @output nvarchar 
    SET @output = CASE 
     WHEN @input IS NULL THEN 'failure' 
     WHEN @input = '' THEN 'failure' 
     ELSE 'success' 
    END 
    RETURN @output 
END 

我必须在它授予权限。所以,我请输入:

GRANT EXECUTE ON [dbo].[test] TO Public 

我打电话这个UDF以下查询的WHERE子句中:

SELECT 
Col1 
FROM some_table 
WHERE 
[dbo].[test](Col2) = 'failure' 

在some_table,我知道col2的有中为NULL的记录。因此,这些记录应该已经返回,因为UDF的输出应该是'失败'的。但是,该查询不会返回任何记录。我哪里错了?

+0

[不良习惯踢:宣布VARCHAR无(长度)](HTTP: //sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length.aspx) - 你应该**总是**为任何' varchar'变量和你使用的参数 – 2014-10-10 05:04:29

回答

1

这是您的减速问题。

变化

RETURNS varchar 

RETURNS varchar(50) 

你的函数返回 'F' 或 'S'