У меня есть следующий UDF.
CREATE FUNCTION [dbo].[udf_GenerateVarcharTableFromStringList]
(@list varchar(MAX),
@delimiter char(1) = N',')
RETURNS @tbl TABLE ([Value] varchar(200))
WITH SCHEMABINDING
AS
BEGIN
DECLARE @chrind INT
DECLARE @Piece nvarchar(4000)
SELECT @chrind = 1
WHILE @chrind > 0
BEGIN
SELECT @chrind = CHARINDEX(@delimiter,@list)
IF @chrind > 0
SELECT @Piece = LEFT(@list,@chrind - 1)
ELSE
SELECT @Piece = @list
INSERT @tbl([Value]) VALUES(@Piece)
SELECT @list = RIGHT(@list,LEN(@list) - @chrind)
IF LEN(@list) = 0 BREAK
END
RETURN
END
Я вызываю эту функцию в следующем примере кода из предложения where в моих sprocs:
WHERE u.[Owner] IN
(SELECT [VALUE]
FROM dbo.udf_GenerateVarcharTableFromStringList(@Owners, ','))
Я использую этот оператор where в sprocs, который я использую для многозначных параметров служб отчетов. Когда пользователь выбирает просто пустое значение, он возвращает правильные данные, но если пользователь выбирает пустое значение и другое значение, имеющее текст, он больше не возвращает владельцев пустых значений, только владельцев из текста? Есть идеи? Я так понимаю, что-то не так с функцией?