0

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

找不到存储过程 'update dbo.ARInvoiceItems set Hideshowflag = '当 Hideshowflag 为空时的情况,然后 Hideshowflag='N' e'。

在 sql server 2005.following 中是我使用的查询。

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 
4

3 回答 3

3

尝试这个。您还可以在asOr的逻辑语句中使用CASEHideshowflag 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 

或者它可以用 a 来完成,使用or作为Simple Case相同的逻辑;IsnullCoalesce

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 为空时的情况,然后 Hideshowflag='N' e'。

我认为您正在尝试将更新查询作为存储过程运行。您需要的是,使用上述查询创建一个存储过程(如果您还没有这样做),然后使用它的名称执行该存储过程;

EXEC 'Your_procedure_name_should_go_here'
于 2013-02-07T09:15:18.670 回答
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

于 2013-02-07T09:15:00.747 回答
-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
于 2013-02-07T09:19:36.027 回答