假设我有两个可能为NULL的变量,我想检查它们是否不同。
但是,我想:
我知道我可以写:
DECLARE @v1 int = ...;
DECLARE @v2 int = ...;
IF (
(@v1 IS NULL AND @v2 IS NOT NULL)
OR (@v1 IS NOT NULL AND @v2 IS NULL)
OR @v1 <> @v2
)
PRINT 'Different!';
但是有更优雅的方式吗?
答案 0 :(得分:5)
只是为了表明有很多方法可以做到。
IF EXISTS(SELECT @v1 EXCEPT SELECT @v2)
PRINT 'Different'
答案 1 :(得分:1)
还有一个选择,但我不确定它是否会更优雅。
IF NOT(NULLIF(@v1, @v2) IS NULL AND NULLIF(@v2, @v1) IS NULL)
PRINT 'Different!';
答案 2 :(得分:0)
尝试这样的事情:
DECLARE @v1 INT = ...;
DECLARE @v2 INT = ...;
IF ISNULL(@v1, -1) <> ISNULL(@v2, -1)
PRINT 'Different!'
答案 3 :(得分:0)
DECLARE @v1 INT = NULL
DECLARE @v2 INT = 1
IF CHECKSUM(@v1) != CHECKSUM(@v2)
PRINT 'Different!'
答案 4 :(得分:0)
我们经常使用null等效值,这是一个对数据类型有效但在程例如,如果您的程序仅使用正整数,则使用等效值为null的值意味着可能存在以下情况:
IF ISNULL(@v1, -1) != ISNULL(@v2, -1) -- or COALESCE if you prefer
PRINT 'Different!';
如果整个范围的整数值是有效条目,则不能使用空等效值。如果是这样的话,原始方法绝对没有问题。
我会建议任何人不要对这样的事情过于聪明,这会让你以后痛苦。保持简单!
答案 5 :(得分:0)
还有一个选项是:
SET ANSI_NULLS OFF
IF @v1 != @v2
PRINT 'Different!';
SET ANSI_NULLS ON