English 中文(简体)
用户定义的函数返回从内部存储程序调用时的不同结果
原标题:User Defined Function Returns Different Result When Called from Inside Stored Procedure

我在客户 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
最佳回答

尝试定义 SP 参数的尺度 -

CREATE PROCEDURE usp_function_test (@SiteID varchar(max))

当您声明一个没有比例的 varchar 参数时, 它默认为 1 的尺度 - 您的输入值被静悄悄地缩短 。

参考文献:http://msdn.microsoft.com/en-us/library/ms176089.aspx

问题回答

暂无回答




相关问题
SQL Server database is not visible

I have installed ASP.NET application with database on our server. ASP.NET application created database using connection string below. The problem is that I do not see database in SQL Server Management ...

Most efficient way to store number 11.111 in SQL Server

What datatype is the most efficient to store a number such as 11.111. The numbers will have up 2 digits before the point and up to three after. Currently the column is a bigint , I am guessing that ...

表格和数据表

是否需要在提瓜表之后更新表格统计数据,还是自动更新?

Inconsistent Generate Change Script

I add a column of type tinyint and being set to not allow nulls in a table and generate the change scripts. The table has data in it at this time. The script has code that creates a temp table and ...

Performance of Sql subqueriesfunctions

I am currently working on a particularly complex use-case. Simplifying below :) First, a client record has a many-to-one relationship with a collection of services, that is, a single client may have ...

selecting one value out of an xml column

I have a particularly troublesome xml column to query data from. The schema is fixed by the Quebec Ministry of Revenue so "it is what it is" The important part of the query looks like this: with ...

Selecting records during recursive stored procedure

I ve got a content management system that contains a hierarchical structure of categories, with sub-categories subject to different ordering options at each level. Currently, that s retrieved by a (...

热门标签