我在执行数据之前使用的存储过程中有一个案例。
DECLARE @Setup nvarchar(50)
SELECT
@ZipCode = CASE
WHEN REPLACE(@ZipCode, '0', '') = ''
THEN NULL ELSE @ZipCode
END,
@ZipCodeEND = CASE
WHEN REPLACE(@ZipCodeEND, '0', '') = ''
THEN NULL ELSE @ZipCodeEND
END,
SELECT
@Setup = CASE WHEN (LEN(ISNULL(@ZipCode, ''))) > 0 THEN '1' ELSE '0' END +
CASE WHEN (LEN(ISNULL(@ZipCodeEND,''))) > 0 THEN '1' ELSE '0' END
IF ISNULL(@ID, 0) = 0
BEGIN
INSERT INTO dbo.MapToStaticValuesTable(ZipCode, ZipCodeEND, Setup)
VALUES(@ZipCode, @ZipCodeEND, @Setup)
END
这里的问题是即使zipcode和zipcodeEnd为空并且在保存到表中后设置为null我仍然得到值“11”而不是获得“00”。
现在,如果我使用nvarchar
值执行相同的示例,它会起作用,但由于ZipCode
和ZipCodeEnd
设置为int
,因此行为很奇怪。
答案 0 :(得分:3)
它表现得很奇怪,因为你在整数上使用字符串函数。不确定您要使用代码实现什么,但我确信只需将值检查为整数即可完成。
我想这可能就是你要找的东西。
select case when nullif(@ZipCode, 0) is null then '0' else '1' end +
case when nullif(@ZipCodeEND, 0) is null then '0' else '1' end
奇怪的一个例子
select isNull(@ZipCode, '')
如果0
为@ZipCode
,则返回null
。