我有一个如下所示的存储过程。
假设我调用过程usp_Exclusion 'Joe', null, 'Bob'
,我需要在存储过程中做些什么,以便将null值更改为字符串(在本例中为'')?除非这是唯一的方法,否则我不希望遍历每个参数并设置为字符串,如果它为空。
ALTER procedure dbo.usp_Exclusion
(
@exclude1 varchar(100) = '',
@exclude2 varchar(100) = '',
@exclude3 varchar(100) = ''
)
as
declare @table table
(
EmpName varchar(20),
EmpLast varchar(20)
)
insert into @table (empName, emplast)
values
('Joe', 'Smith'),
('Jim', 'Neumann'),
('Bob', 'Bright'),
('James', 'Dung')
SELECT * from @table where EmpName not in (isnull(@exclude1, ''), isnull(@exclude2, ''), isnull(@exclude3, ''))
--SELECT * from @table where EmpName not in (@exclude1, @exclude2, @exclude3)
我问的原因是因为从SSRS
报告调用此SP,默认情况下参数为空,因此报告加载时没有任何用户交互。我能使其工作的唯一方法是将报表中的每个参数设置为''
(空白区域)。
唯一的问题是,当有人要在参数中输入内容时,这很麻烦;他们不知道那里已经有空间了。
我这样做的原因是因为IN
子句不能有null
值。
感谢。
我总是可以在ISNULL
子句中使用IN
。
答案 0 :(得分:1)
使用案例陈述
设置新参数@ exclude_new_1 = CASE WHEN(@ exclude1 IS NULL)THEN''ELSE @ exclude1 END
在您的选择中使用新参数。应该做的工作......
答案 1 :(得分:0)