SQL Server 2012中的切换案例

时间:2014-01-13 10:09:25

标签: sql-server tsql sql-server-2012 case

我想使用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

我哪里错了?帮助我。

2 个答案:

答案 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