【问题标题】:Setting BIT variable using CASE statements使用 CASE 语句设置 BIT 变量
【发布时间】:2020-09-16 14:24:06
【问题描述】:

我正在进行迁移,它使用 Crystal 中的一些报告元素并尝试将以前存在的内容转换为 SQL。它看起来使用 VB 脚本,但我不知道如何进行切换。

最初我认为CASE WHEN 语句就足够了,但我无法确定查询背后的正确逻辑。

下面的 VB 示例:

Dim HasValue As Boolean

If isnull({Reference.Shallow}) Then
    HasValue=False
    formula="MISSING"
Else 
    HasValue=True
End If

我知道 IF 确实存在于 SQL Server 中,但在研究它时,人们往往会偏离它,因为 CASE WHEN 也是如此?

我有一些我认为应该以相同的方式工作的假动作,但这并没有解决,因为您不能在 CASE WHEN 语句中设置变量(我相信):

DECLARE HasValue BIT

CASE WHEN Reference.Shallow IS NULL 
THEN SET @HasValue = 1 
ELSE SET @HasValue = 0 
END AS Shallow

在 SQL 中最合适的方法是什么?

【问题讨论】:

  • 在 SQL 中,case 是一个表达式,而不是一个逻辑流/分支结构。尝试使用set @HasValue = CASE ... END
  • @Larnu 认为你误读了这个问题,我知道IF 存在于 SQL 中!
  • 我想念那句话,但不是问题,@ExitGame。

标签: sql sql-server tsql azure-sql-database


【解决方案1】:

你必须使用这个代码sn-p

DECLARE @HasValue BIT

SELECT @HasValue=CASE WHEN Shallow IS NULL THEN CAST(1 AS BIT) ELSE CAST(0 AS 
BIT) END FROM Reference.Shallow

【讨论】:

    【解决方案2】:

    CASE 返回一个标量值,而不是运算或布尔结果。您将变量的值设置为CASE 的结果:

    SET @HasValue = (SELECT CASE WHEN R.Shallow IS NULL THEN 1 ELSE 0 END
                     FROM dbo.Reference R
                     /*WHERE...? */);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多