我在SSMS 2012工作。我有一个标量UDF,用于测试某个值是否为3位数:
CREATE FUNCTION [dbo].[test8] (@input nvarchar)
RETURNS varchar(50)
AS
BEGIN
DECLARE @output varchar(50)
SET @output = CASE
WHEN LEN(@input) <> 3 THEN 'failure' --must be 3 characters
WHEN LEFT(@input,1) NOT LIKE '%[123456789]%' THEN 'failure' --first character must be a natural number
WHEN SUBSTRING(@input,2,1) NOT LIKE '%[0123456789]%' THEN 'failure' --second character must be a natural number (zero inclusive)
WHEN SUBSTRING(@input,3,1) NOT LIKE '%[0123456789]%' THEN 'failure' --third character must be a natural number (zero inclusive)
ELSE 'success'
END
RETURN @output
END
我有以下查询,其中我尝试返回某个列传递给UDF时失败的记录:
SELECT
Col1
FROM some_table
WHERE
dbo.test8(Col2) = 'failure'
我有几条记录可以带来成功&#39;在这个UDF上(例如,&#39; 123&#39;),但它们在查询中返回,这意味着UDF正在返回&#39;失败&#39;在他们。我的查询有什么问题?我最好的猜测是它与SUBSTRINGs有关。
答案 0 :(得分:2)
如果未指定(n)varchar参数的大小,则默认长度为1个字符。
更改
CREATE FUNCTION [dbo].[test8] (@input nvarchar)
到
CREATE FUNCTION [dbo].[test8] (@input nvarchar(4))