Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在更新查询中编写case_Sql_Sql Server 2005 - Fatal编程技术网

Sql 如何在更新查询中编写case

Sql 如何在更新查询中编写case,sql,sql-server-2005,Sql,Sql Server 2005,我试图在更新查询中使用用例,但它给了我错误信息 找不到存储过程“update dbo.ARInvoiceItems set Hideshowflag=”如果Hideshowflag为null,则Hideshowflag='N'e' 以下是我使用的查询 update dbo.ARInvoiceItems set Hideshowflag =( case when Hideshowflag is null then Hideshowflag='N'

我试图在更新查询中使用用例,但它给了我错误信息


找不到存储过程“update dbo.ARInvoiceItems set Hideshowflag=”如果Hideshowflag为null,则Hideshowflag='N'e'

以下是我使用的查询

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 

您发布的代码中有语法错误

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)


此语句是否在字符串变量中表示您正在执行?

您发布的代码中有语法错误

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)


此语句是否在字符串变量中,您正在执行?

尝试此操作。您还可以在
CASE
的逻辑语句中使用
,因为
Hideshowflag为null或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 
或者,对于相同的逻辑,可以使用
Isnull
Coalesce
as使用
简单案例

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

找不到存储过程“update dbo.com”集合 Hideshowflag='case当Hideshowflag为null时,则Hideshowflag='N' e’

我认为您正在尝试将上述更新查询作为存储过程运行。您需要的是,使用上面的查询(如果您还没有执行),然后使用其名称作为执行存储过程

EXEC 'Your_procedure_name_should_go_here'

试试这个。您还可以在
CASE
的逻辑语句中使用
,因为
Hideshowflag为null或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 
或者,对于相同的逻辑,可以使用
Isnull
Coalesce
as使用
简单案例

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

找不到存储过程“update dbo.com”集合 Hideshowflag='case当Hideshowflag为null时,则Hideshowflag='N' e’

我认为您正在尝试将上述更新查询作为存储过程运行。您需要的是,使用上面的查询(如果您还没有执行),然后使用其名称作为执行存储过程

EXEC 'Your_procedure_name_should_go_here'
这就是你想要的

 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
这就是你想要的

 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

如果这是您的实际代码,则会出现语法错误-您没有关闭从
set Hideshowflag=(
“找不到存储过程”开始的括号可能意味着执行此查询的代码有问题。显示该代码可能会有所帮助。如果这是您的实际代码,则您有语法错误-您没有关闭从
set Hideshowflag=(
“找不到存储过程”开始的括号可能意味着执行此查询的代码有问题。显示该代码可能会有所帮助。