我正在尝试在更新查询中使用案例,但它给我的错误
无法找到存储过程'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
答案 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
使用Isnull
或Coalesce
作为相同逻辑来完成{/ 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