SQL Server-使用SELECT CASE WHEN设置位变量,但如果SELECT未返回任何记录,则将其默认为0
我目前正在使用以下语句。我怎样才能只用一句话就完成这个逻辑呢SQL Server-使用SELECT CASE WHEN设置位变量,但如果SELECT未返回任何记录,则将其默认为0,sql,sql-server,Sql,Sql Server,我目前正在使用以下语句。我怎样才能只用一句话就完成这个逻辑呢 DECLARE @DisableCSDSync BIT SET @DisableCSDSync = (SELECT CASE WHEN PropertyValue = 'true' THEN 1 ELSE 0
DECLARE @DisableCSDSync BIT
SET @DisableCSDSync = (SELECT
CASE WHEN PropertyValue = 'true'
THEN 1
ELSE 0
END
FROM MyTable WITH (NOLOCK)
WHERE Property = 'DisableSync' AND ParentId = 61040)
IF @DisableCSDSync IS NULL
SET @DisableCSDSync = 0
您可以在声明变量时设置默认值,以便在select查询没有提取行的情况下,该变量将具有默认值。另外,在select语句中设置该值,以防止在没有要提取的行时该值变为null,如下所示:
DECLARE @DisableCSDSync BIT = 0
SELECT @DisableCSDSync = CASE WHEN PropertyValue = 'true' THEN 1 ELSE 0 END FROM MyTable WITH (NOLOCK) WHERE Property = 'DisableSync' AND ParentId = 61040
您可以在声明变量时设置默认值,以便在select查询没有提取行的情况下,该变量将具有默认值。另外,在select语句中设置该值,以防止在没有要提取的行时该值变为null,如下所示:
DECLARE @DisableCSDSync BIT = 0
SELECT @DisableCSDSync = CASE WHEN PropertyValue = 'true' THEN 1 ELSE 0 END FROM MyTable WITH (NOLOCK) WHERE Property = 'DisableSync' AND ParentId = 61040
即使select不返回任何记录,此查询也将为您提供预期的输出
DECLARE @DisableCSDSync BIT
SET @DisableCSDSync = ISNULL((SELECT CASE
WHEN PropertyValue = 'true' THEN 1
ELSE 0
END
FROM MyTable WITH (NOLOCK)
WHERE Property = 'DisableSync'
AND ParentId = 61040), 0)
即使select不返回任何记录,此查询也将为您提供预期的输出
DECLARE @DisableCSDSync BIT
SET @DisableCSDSync = ISNULL((SELECT CASE
WHEN PropertyValue = 'true' THEN 1
ELSE 0
END
FROM MyTable WITH (NOLOCK)
WHERE Property = 'DisableSync'
AND ParentId = 61040), 0)
您还可以使用以下命令
DECLARE @DisableCSDSync BIT = ISNULL(TRY_CAST((
SELECT PropertyValue
FROM MyTable WITH (NOLOCK)
WHERE Property = 'DisableSync'
AND ParentId = 61040) AS BIT), 0);
它使用与其他答案之一相同的ISNULL方法来处理零行情况,但也使用相同的ISNULL与TRY_CAST结合使用。。作为处理本案其他分支的一部分
语义并不完全相同,如果PropertyValue为1,则使用上述方法将其视为true,但它们可能足够接近
DECLARE @DisableCSDSync BIT = ISNULL(TRY_CAST((
SELECT PropertyValue
FROM MyTable WITH (NOLOCK)
WHERE Property = 'DisableSync'
AND ParentId = 61040) AS BIT), 0);
它使用与其他答案之一相同的ISNULL方法来处理零行情况,但也使用相同的ISNULL与TRY_CAST结合使用。。作为处理本案其他分支的一部分
语义不完全相同,如果PropertyValue为1,则使用上述方法将其视为true,但它们可能足够接近。DECLARE@DisableCSDSync BIT 设置@DisableCSDSync=isnull 选择PropertyValue为'true'时的最大大小写,然后选择1或0结束 从我和诺洛克的桌子上 其中属性='DisableSync' 和ParentId=61040 ,0 当您没有收到任何记录时,Isnull将授予默认值0。
最大值将确保您只收到1条记录。多个记录将给你一个错误 声明@DisableCSDSync位 设置@DisableCSDSync=isnull 选择PropertyValue为'true'时的最大大小写,然后选择1或0结束 从我和诺洛克的桌子上 其中属性='DisableSync' 和ParentId=61040 ,0 当您没有收到任何记录时,Isnull将授予默认值0。
最大值将确保您只收到1条记录。多个记录将给你一个错误 PropertyValue的数据类型是什么?PropertyValue的数据类型是什么?我喜欢这个答案,但这也可以通过COALESCE实现吗?我喜欢这个答案,但也可以通过COALESCE实现吗?