存储过程不会返回行

时间:2014-08-09 13:12:41

标签: sql-server stored-procedures reporting-services

我想在Report Builder中使用SQL Server 2014存储过程。

ALTER PROCEDURE [dbo].[getCharacterDetails]
      @id int
     ,@name VARCHAR(200)  = ''  OUTPUT
     ,@level int  = 0 OUTPUT
AS
BEGIN
    SELECT 
        @name = name, @level = level
    FROM 
        dbo.Characters 
    WHERE
        id = @id;

    RETURN
END

我想使用@id作为输入参数,并使用名称和级别作为仅输出参数。

当我使用Report Builder调用该过程时,我没有数据。

执行查询时:

 exec [dbo].[getCharacterDetails] @id= 1;

我也没有得到结果值,只有(1行受影响)或命令已成功完成。 表字符包含1行,id = 1,因此选择正确。

我做得对吗?我应该使用存储过程还是UDF?

我是SQL Server新手。

5 个答案:

答案 0 :(得分:1)

不,这个存储过程肯定不会返回行 - 因为您将值捕获到输出参数中。

如果您想返回行 - 请勿将这些列分配给变量!只需按“原样”选择。

所以只需要这个 SELECT语句:

SELECT 
    name, level
FROM 
    dbo.Characters 
WHERE
    id = @id;

,您的存储过程现在将返回一组数据结果。

答案 1 :(得分:1)

尝试以下列方式运行存储过程:

 declare @name VARCHAR(200);
 declare @level int;

 exec dbo.getCharacterDetails 1, @name output, @level output;

 select @name, @level;

您必须提供参数,然后再查看它们。这就是output参数的工作原理。

如果您希望存储过程返回行,则不要分配值,或者您可以同时执行这两个操作。身体可能是:

SELECT  @name = name, @level = level
FROM dbo.Characters 
WHERE id = @id;

SELECT @name, @level;

而且,对于这样一个简单的过程,您可能只需要一个视图或用户定义的函数。

答案 2 :(得分:1)

试试这个:

ALTER PROCEDURE [dbo].[getCharacterDetails]
      @id int
     ,@name VARCHAR(200)  = ''  OUTPUT
     ,@level int  = 0 OUTPUT
AS
BEGIN
    SELECT 
        name, level
    FROM 
        dbo.Characters 
    WHERE
        id = @id;

    RETURN
END

答案 3 :(得分:0)

您的数据已缓存,删除数据文件(rdl.data),它位于您的rdl所在的同一文件夹中

答案 4 :(得分:0)

名称和级别参数没有用处。删除它们。

ALTER PROCEDURE [dbo].[getCharacterDetails]
  @id int
AS
BEGIN
SELECT 
    name, level
FROM 
    dbo.Characters 
WHERE
    id = @id;

RETURN
END

这样称呼:

EXEC [dbo].[getCharacterDetails] @ID

并确保在参数选项卡中将SSRS参数映射到输入参数@ID。

如果仍然没有得到任何东西,请使用SQL事件探查器来计算它传入的参数。