我想使用switch case
在SQL Server 2012中执行多个更新表这是我的查询
CREATE PROCEDURE deactivateRecord
@paraTableName varchar(15),
@paraID int
AS
BEGIN
SET NOCOUNT ON;
select
case @paraTableName when 'UserMaster' then update UserMaster set IsActive=1 where UserID=@paraID
case @paraTableName when 'GroupMaster' then update GroupMaster set IsActive=1 where GRoupID=@paraID
END
GO
我哪里错了?帮助我。
答案 0 :(得分:4)
试试这个 -
CREATE PROCEDURE deactivateRecord
@paraTableName varchar(15),
@paraID int
AS BEGIN
SET NOCOUNT ON;
UPDATE dbo.UserMaster
SET IsActive = 1
WHERE UserID = @paraID
AND @paraTableName = 'UserMaster'
UPDATE dbo.GroupMaster
SET IsActive = 1
WHERE GRoupID = @paraID
AND @paraTableName = 'GroupMaster'
END
GO
答案 1 :(得分:2)
在特定案例解决后,您是否尝试读过您的代码?例如,如果@paraTableName ='UserMaster',您的代码将像这样解析(忽略您的CASE
语句没有END
子句的事实,并且T-SQL中的CASE语句不能包含代码块 - 仅包含原子值):
select update UserMaster set IsActive=1 where UserID=@paraID
这显然没有意义,因为你在UPDATE
语句中不能有SELECT
语句。
由于您在存储过程中,因此请将代码重写为:
IF @paraTableName = 'UserMaster'
update UserMaster set IsActive=1 where UserID=@paraID
IF @paraTableName = 'GroupMaster'
update GroupMaster set IsActive=1 where GRoupID=@paraID