[英]How to write case in update query
我正在尝试在更新查询中使用案例,但它给我错误
找不到存储过程'update dbo.ARInvoiceItems set Hideshowflag ='如果Hideshowflag为null则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
尝试这个。 您也可以在CASE
的逻辑语句中使用Or
,因为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
或者 ,对于使用Isnull
或Coalesce
的相同逻辑,可以使用Simple Case
来完成;
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'。
我认为您正在尝试将以上更新查询作为存储过程运行。 您需要的是,使用上述查询创建一个存储过程 (如果尚未执行),然后使用其名称as执行该存储过程;
EXEC 'Your_procedure_name_should_go_here'
您发布的代码中存在语法错误
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
的字符串变量中?
这就是你想要的
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.