【发布时间】:2010-09-08 15:31:11
【问题描述】:
我有以下 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 子句中使用以下代码示例调用此函数:
WHERE u.[Owner] IN
(SELECT [VALUE]
FROM dbo.udf_GenerateVarcharTableFromStringList(@Owners, ','))
我在 sprocs 中使用这个 where 语句,用于报告服务多值参数。当用户只为值选择空白时,它会返回正确的数据,但是如果用户选择一个空白值和另一个实际包含文本的值,它就不再返回空白值所有者,只是文本中的所有者?有任何想法吗?我认为该功能有问题?
【问题讨论】:
-
一个简单的分割函数真是个好名字!
-
but if a user selects a blank value and another value that actualyl has text it does not return the blank value owners anymore我不明白。 -
在这两种情况下,什么作为参数传递给函数? (如果您不知道,请使用 SQL Profiler 查找)也许 RS 会默认自动发送完整列表,除非选择了另一个选项。
-
我不知道如何使用 sql profiler,但例如所有者可能是 15103N,它只给我正确的单元 e1601,如果我只为所有者选择空白,它给我 e1502 这是正确的但是当我为所有者选择空白和 15103N 时,它只给我 e1601 .....
-
哇哈哈。糟糕...尝试将以下内容传递给 TVF:'15103n,,'
标签: sql sql-server sql-server-2005 reporting-services visual-studio-2005