gpt4 book ai didi

sql - 从存储过程在 SSRS 中使用多个参数返回空白

转载 作者:行者123 更新时间:2023-12-02 00:05:18 25 4
gpt4 key购买 nike

我创建了两个数据集。

数据集 1(来自存储过程):

CREATE PROCEDURE [dbo].[usp_GetPerson](
@Category varchar(20))
AS

BEGIN
SELECT FirstName, LastName, Category
FROM tblPerson
WHERE (Category IN (@Category))

END

数据集 2:

SELECT DISTINCT Category
FROM tblPerson

在 SSRS 中,我编辑了参数以允许多个值并从 Dataset2 中提取可用值。

我已尝试单独基于数据集 1 进行过滤,但收到的所有输入都是重复的(这就是我选择使用数据集 2 的原因)。

当我使用存储过程时,我似乎无法选择多个值。我只能选择单个值,否则报告会变成空白。

所以我重新创建了 Dataset1,但没有使用存储过程。相反,我只是在文本编辑器中编写了 SQL 语句,并且能够很好地选择多个值。

有谁知道为什么会这样,可以帮我解决这个问题吗?

注意:当我的 SQL 语句变得更加复杂时,我将使用存储过程来连接多个数据库。我尝试在 SSRS 中执行此操作,但使用存储过程要快得多。

谢谢!

最佳答案

使用如下查询从 SP 运行时的问题:

SELECT  FirstName, LastName, Category                   
FROM tblPerson
WHERE (Category IN (@Category))

其中 @Category 类似于 'Cat1,Cat2,Cat3'

IN 子句将 @Category 视为单个字符串,即一个单一值,而不是一组多个值,因此很可能永远不会匹配任何内容.

这就是为什么当您只有一个值时它起作用的原因 - 类似 'Cat1' 的东西将正确匹配一行或多行。

当在报告本身中作为嵌入式查询运行时,SSRS 本质上会将其视为一段动态 T-SQL,这意味着字符串 @Category 会按编写方式添加到主查询中,并且工作正常。

因此 SP 有几个选项。

您可以在 SP 中运行动态 T-SQL,例如:

DECLARE @Query NVARCHAR(max) = N'SELECT  FirstName, LastName, Category
FROM tblPerson
WHERE (Category IN (' + @Category + ))'

EXEC @Query

动态 T-SQL 很少是理想的,所以另一种选择是将 @Category 变成一个集合以供查询使用,通常使用一个函数来拆分字符串并返回一个表,这将看起来像:

SELECT  FirstName, LastName, Category                   
FROM tblPerson
WHERE (Category IN (SELECT values from dbo.SplitString(@Category)))

有许多方法可以从定界字符串返回一个集合。

请参阅 many split options 的 SO 问题.

或来自 Erland Sommarskog 的权威文章.

选择您最喜欢的一个,然后从那里开始。

关于sql - 从存储过程在 SSRS 中使用多个参数返回空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18796776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com