存储过程与isnull(表达式,替换)不返回任何内容

时间:2014-03-12 04:58:02

标签: sql sql-server stored-procedures isnull

我有一个存储过程接受参数并返回具有匹配值的元组。如果没有传递参数,则返回表中的每个元组

create procedure getScore
(
    @clinicCode varchar = null,
)
as
begin
    select * from myTable
    where ClinicCode = isnull(@clinicCode, ClinicCode)
end

所以我执行了它

exec getScore
exec getScore 'PSH'

他们都没有返回元组。     我确实尝试从myTable 中选择*,然后返回所有元组。不确定为什么来自...... isnull(表达,替换)的陈述搞砸了

1 个答案:

答案 0 :(得分:2)

您需要更改

的声明
@clinicCode varchar = null,

到你需要的实际尺寸。

类似

@clinicCode varchar(50) = null,

原因是

@clinicCode varchar

相同
@clinicCode varchar(1)

然后将您的字段isnull(@clinicCode, ClinicCode)仅转换为ClinicCode

的第一个字母

看一下这个例子

SQL Fiddle DEMO