如何在更新查询中编写案例

时间:2013-02-07 09:12:33

标签: sql sql-server-2005

我正在尝试在更新查询中使用案例,但它给我的错误

  

无法找到存储过程'update dbo.ARInvoiceItems设置Hideshowflag ='当Hideshowflag为null然后Hideshowflag ='N'e'时的情况。

在sql server 2005中。以下是我使用的查询。

update dbo.ARInvoiceItems 
    set Hideshowflag =(
        case 
            when Hideshowflag is null then Hideshowflag='N'
            when Hideshowflag='N' then 'Y'
            when Hideshowflag='Y' then 'N' end`
where SOId=@SOID 

3 个答案:

答案 0 :(得分:3)

试试这个。您还可以在Or的逻辑语句中使用CASE作为Hideshowflag is null or Hideshowflag='Y'

Update dbo.ARInvoiceItems 
    Set Hideshowflag =
        Case 
            When Hideshowflag is null or Hideshowflag='Y' Then  'N'
            When Hideshowflag='N' Then 'Y'
        End
Where SOId = @SOID 

可以使用Simple Case使用IsnullCoalesce作为相同逻辑来完成{/ 1};

Update dbo.ARInvoiceItems 
    Set Hideshowflag =
        Case Isnull(Hideshowflag,'Y')
            When 'Y' Then  'N'
            When 'N' Then  'Y'
        End
Where SOId = @SOID 
  

无法找到存储过程'update dbo.ARInvoiceItems set   Hideshowflag ='Hideshowflag为null时的情况,然后Hideshowflag ='N'   E”。

我认为您尝试将更新查询作为存储过程运行。你需要的是create a stored procedure以及上面的查询(如果你还没有这样做)然后使用它的名称执行存储过程;

EXEC 'Your_procedure_name_should_go_here'

答案 1 :(得分:2)

您发布的代码中存在语法错误

UPDATE dbo.ARInvoiceItems
SET    Hideshowflag =  CASE
                          WHEN Hideshowflag IS NULL THEN  'N'
                          WHEN Hideshowflag = 'N' THEN 'Y'
                          WHEN Hideshowflag = 'Y' THEN 'N'
                        END 
WHERE  SOId = @SOID 

但是你说你得到的错误信息

  

找不到存储过程'update dbo.ARInvoiceItems set Hideshowflag = ...

如果您执行EXEC @Foo而不是EXEC (@Foo)

,通常会发生

这个语句是否在一个字符串变量中EXEC - ing?

答案 2 :(得分:-1)

这就是你想要的

 DECLARE @TEMP table
    (
        jobid int IDENTITY (1,1),
        statusCode int
    )

    INSERT INTO @TEMP
    SELECT 15 UNION 
    SELECT 114 UNION 
    SELECT 14 UNION 
    SELECT 152 UNION 
    SELECT 41 

    SELECT * FROM @TEMP

    DECLARE @jobid int  = 3, @statusCode int = 40

    UPDATE @TEMP
    SET statusCode = (CASE WHEN @statusCode = 40 THEN 15 ELSE 14 END)
    WHERE jobid = @jobid

    SELECT * FROM @TEMP