如何在sql server和s-s-rs中获取多个值以及空值

Posted

技术标签:

【中文标题】如何在sql server和s-s-rs中获取多个值以及空值【英文标题】:How to get multiple values along with null values in sql server and s-s-rs 【发布时间】:2013-04-12 21:51:14 【问题描述】:

我正在处理这个 s-s-rS 报告,用户要求我创建一个包含三个参数的报告:学期、学生状态和录取通知。

说明: 有以下不同的入学优惠: 拒绝计划费用 拒绝-其他 拒绝调度/定时 公认 拒绝-在另一所学校注册 拒绝计划适合/教育需求 延期 拒绝-财务支持

当学生/招生人员回复报价时,它会被记录在杂项表中。但是,如果未捕获响应,则不会创建记录。

用户希望我也希望我包括尚未回复报价的学生。这样想很容易,这就是我所做的:

使用用户要求的三个参数创建了一个存储过程。 --在这个存储过程中,为了允许参数有多个值,我使用了以下函数:

CREATE FUNCTION CSVToVarChar (  
@List VARCHAR(8000),  
@Delimiter CHAR(1) = ','  
)   
RETURNS TABLE  

AS  
RETURN SELECT CAST(SUBSTRING(@Delimiter + ISNULL(@List,'') + @Delimiter, Number + 1,     CHARINDEX(@Delimiter, @Delimiter + ISNULL(@List,'') + @Delimiter, Number + 1)  - Number - 1) AS VARCHAR(8000)) AS String  
FROM dbo.fff_Number WITH(NOLOCK)  
WHERE SUBSTRING( @Delimiter + ISNULL(@List,'') + @Delimiter, Number, 1 ) = @Delimiter  
    AND Number < LEN( @Delimiter + ISNULL(@List,'') + @Delimiter )    

这个函数在sp的where子句中是这样使用的:

 AdmissionOffer IN (SELECT string
                       FROM
                           dbo.CSVToVarChar(@AdmissionOffer, ','))

接下来,我开始创建报告: 在报告中,我使用以下查询为 admissionoffer 参数创建了一个数据集以获取我的参数值:

SELECT distinct ISNULL(attributevalue, 'No Response') as AdmissionOffer from table....

我还允许在 s-s-rs 中为这个参数设置多个值。用户会将 lov 中的 null 视为“无响应”。

我需要什么帮助:

如何创建一个报告/存储过程(不确定我需要在哪里进行更改),它可以处理多个值,空值就是其中之一。当我运行报告时,我什么也没得到。如果我从 s-s-rs 中的 Admission offer LOV 中删除“No response”值,则报告工作正常。

【问题讨论】:

【参考方案1】:

嗯,你需要知道的基本事情是,在将参数传递给过程时,NULL 和 NOT NULL 永远不会混在一起。

现在要解决这个问题 - 如果字符串拆分的实际值为“NULL”,那么我在拆分函数中将其转换为 NULL。 (可以是任何东西,但 'NULL' 似乎应该是使用的那个)。对我来说,这就像将我的参数的 SQL 更改为联合另一个值一样简单 - 不确定你是如何得到你的。

现在因为 IN() 函数在其中也不能使用 NULL 值,所以要解决这个问题(在我看来,这可能是一个更好的选择)是我内部加入了拆分表以进行过滤。

SELECT *
FROM table a
INNER JOIN dbo.ufn_split(@list,'|') s ON a.pkey = s.value

【讨论】:

以上是关于如何在sql server和s-s-rs中获取多个值以及空值的主要内容,如果未能解决你的问题,请参考以下文章

获取每个月的第一个日期 SQL Server 2008 R2

如何在 SQL Server 中获取一个季度的上个月数据?

如何使用分组和分页符来创建双面 s-s-rS 徽章报告? (Microsoft SQL Server 2012 报表生成器)

无法在 s-s-rS 和 SQL Server 报表生成器中运行或预览报表

我们如何分配权限来设置 SQL Server Reporting Services

在 SQL Server 2005 Express 版本中使用 s-s-rS 都有哪些限制?