【问题标题】:SQL Case - with SELECTSQL 案例 - 使用 SELECT
【发布时间】:2011-11-09 10:48:47
【问题描述】:

我在使用 select 语句在 CASE 语句中设置返回值时遇到问题……有人可以看看吗?

DECLARE @SystemTypeId int
SELECT @SystemTypeId = [SystemTypeId] FROM [Properties] WHERE [Id] = @PropertyId

SET @RETURN_VAL =
    CASE @SystemTypeId
      WHEN 2 THEN (SELECT [Created] FROM [Assets] WHERE [Id] = @AssetId) 
      WHEN 3 THEN (SELECT dbo.GetAssetValueById([CreatedBy])
                   FROM [Assets]
                   WHERE [Id] = @AssetId)
      WHEN 9 THEN (SELECT [LastModified]
                   FROM [Assets]
                   WHERE [Id] = @AssetId)
      ELSE NULL
    END

【问题讨论】:

  • 第一步是声明@AssetID
  • @AssetId 已经在上面声明了。
  • 似乎无论@SystemTypeId 是什么,总是选择案例2。
  • 嗯..你确定吗?您是否真的通过“打印@SystemTypeID”测试了@SystemTypeID 的值?

标签: sql tsql stored-procedures case


【解决方案1】:

试试这个:

SELECT @RETURN_VAL =
        CASE @SystemTypeId
            WHEN 2 THEN  [Created] 
            WHEN 3 THEN  dbo.GetAssetValueById([CreatedBy]) 
            WHEN 9 THEN [LastModified] 
            ELSE NULL
        END 
FROM [Assets] 
WHERE [Id] = @AssetId

【讨论】:

  • @a1ex07,您应该只回答了一半,然后进行了编辑。不知道你怎么做?
  • 似乎无论@SystemTypeId 是什么,总是选择案例2(第一个案例)。
  • 我什至改成这个来测试:
  • 我是个十足的白痴。我已经试过了。我的 DAL 中的代码错误。
  • Randall:试试SELECT @SystemTypeId = 9; 你会看到你的@RETURN_VAL 是LastModified 的值。
猜你喜欢
  • 2021-04-22
  • 2020-11-29
  • 1970-01-01
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-29
相关资源
最近更新 更多