我想在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新手。
答案 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事件探查器来计算它传入的参数。