我在客户 SQL Server 2005 数据库工作,看到一些奇怪的行为。我有2008 年的一点经验,但这是我在2005 年的第一次战斗,所以我希望这与我缺乏经验有关。
我试图做什么? < 坚固>? 坚固 > 我在2005年苏维埃社会主义共和国苏维埃社会主义共和国苏维埃社会主义共和国苏维埃社会主义共和国苏维埃社会主义共和国苏维埃社会主义共和国共和国苏维埃社会主义共和国共和国共和国苏维埃社会主义共和国共和国共和国苏维埃社会主义共和国共和国共和国共和国苏维埃社会主义共和国共和国联盟(SURS)中开发一个销售仪表仪表仪表仪表仪表。其中一项报告参数是一个多值参数,我需要将其传递到一个存储程序。我在一些博客和这里找到了一个关于SO的作品,并应用了一个函数,分割一个逗号分隔了一个已划定的瓦尔,返回了一个表格。我需要此功能才能在程序内返回正确的值,因为我正在为苏维民主共和国苏维民主共和国的数据集调用存储程序。
my problem: 当我直接从SSMS内部执行给定值的函数时, 我收到一张有7行( 如预期的那样) 的表格。 当我执行一个调用该函数的程序时, 它只返回表中的1行。 执行此函数的用户和该程序也是两个对象的拥有者 。
在张贴问题之前,我做了很多功课来达到这一点,所以我希望我在这里做了尽职调查。 委托人没有给予我与 SQL 剖析仪合作的特权,所以我一直无法朝这个方向挖掘。
我想这也许是一个权限问题, 但这个函数仍然执行, 并且返回一行而不是七行让我困惑。 它似乎只返回了逗号限定字符串的第一个号码 。
我的问题: < / 坚固 > 是什么原因造成下文概述的行为? 请告诉我,如果我应提供任何补充资料的话。
从 SSMS 执行 < 强 > : 强 >
declare
@SiteID varchar(max);
set @SiteID = 1,2,3,4,5,6,7 ;
BEGIN
exec usp_function_test @SiteID;
select * from udf_rpt_multivalueparamtotable(@SiteID, , ,1)
END
程序 " 强 " 产出: 强 >
Val
---
1
选定语句 < 坚固> 输出: 坚固>
Val
---
1
2
3
4
5
6
7
<强力 > 功能代码: 强 >
CREATE FUNCTION [dbo].[udf_RPT_MultiValueParamToTAble](
@String VARCHAR(max), /* input string */
@Delimeter char(1), /* delimiter */
@TrimSpace bit ) /* kill whitespace? */
RETURNS @Table TABLE ( [Val] VARCHAR(4000) )
AS
BEGIN
DECLARE @Val VARCHAR(4000)
WHILE LEN(@String) > 0
BEGIN
SET @Val = LEFT(@String,
ISNULL(NULLIF(CHARINDEX(@Delimeter, @String) - 1, -1),
LEN(@String)))
SET @String = SUBSTRING(@String,
ISNULL(NULLIF(CHARINDEX(@Delimeter, @String), 0),
LEN(@String)) + 1, LEN(@String))
IF @TrimSpace = 1 Set @Val = LTRIM(RTRIM(@Val))
INSERT INTO @Table ( [Val] )
VALUES ( @Val )
END
RETURN
END
<强者>《刑事诉讼法》: 强者>
CREATE PROCEDURE usp_function_test (@SiteID varchar)
AS
SET NOCOUNT ON
BEGIN
select * from udf_rpt_multivalueparamtotable(@SiteID, , ,1)
END