如何在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
如何使用分组和分页符来创建双面 s-s-rS 徽章报告? (Microsoft SQL Server 2012 报表生成器)
无法在 s-s-rS 和 SQL Server 报表生成器中运行或预览报表