2014-10-09 2 views
0

Я работаю в SSMS 2012. У меня есть следующий скалярном 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 в ИНЕКЕ следующего запроса:

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 и параметры, которые вы используете –

ответ

1

Это проблема с вашим замедлением.

Изменить

RETURNS varchar 

в

RETURNS varchar(50) 

ваша функция возвращает 'F' или 's'

Смежные вопросы