我有一个SQL Server存储过程,我尝试从中进行SSRS报告。 sp中有一个参数。调用单个值时,该参数在SSRS中起作用。但是,在调用这两个值时,只返回第一个值。 这里有一些重要的东西 - “活跃”'字段是一种数据类型,所以这就是问题最可能出现的地方。
ALTER PROCEDURE [dbo].[USP_RptRC]
@Active VARCHAR(1)
AS
BEGIN
SELECT [Funding]
,[4thChar]
,REPLACE([Description], CHAR(13) + CHAR(10), '') [Description]
,[Comments]
,CAST(Active AS VARCHAR(1)) Active
,[IsDeleted]
,[LastModifiedBy]
,[LastModifiedDate]
FROM [RC]
WHERE Active IN (@Active)
END
答案 0 :(得分:1)
首先你的参数只有1的长度。其次,因为你使用'Where In',你需要做一些额外的工作。我过去也有同样的问题,这篇文章帮助我实现了它。
答案 1 :(得分:0)
由于@Active是VARCHAR(1)
,如果您总是使用1或0,则可以是CHAR
或INT
,您只能传递其中一个值。如果您希望能够在Active
为1或0的位置返回,请执行以下操作:
@Active VARCHAR(1) = NULL
AS
BEGIN
SELECT [Funding]
,[4thChar]
,REPLACE([Description], CHAR(13) + CHAR(10), '') [Description]
,[Comments]
,CAST(Active AS VARCHAR(1)) Active
,[IsDeleted]
,[LastModifiedBy]
,[LastModifiedDate]
FROM [RC]
WHERE @Active IS NULL or Active = @Active
然后在您的SSRS报告中,只需将参数的默认值设置为NULL,和/或在参数设置中,允许NULL值以及您明确选择的1和0.当选择NULL时,1和0都是将被退回。当然,您可以将SSRS中的参数选项标记为“All”或“Inactive& Active”,并将NULL作为实际值传递。
答案 2 :(得分:0)
明智的T-SQL - '0,1'不是两个值,它是一个,在你使用它的上下文中它是一个字符串值。但由于您的参数长度(由您)限制为1,因此引擎会修剪第一个字符后的所有内容,以将“0,1”转换为“0”。如果你传递'1,无论如何'你将在你的存储过程中获得'1'。这种方式“只返回第一个”。
但由于@Active
为bit
,您应将其声明为bit
。然后在收到NULL
的{{1}}时更改逻辑以包含适当的记录子集,如下所示:
@Active