SQL存储过程事务和优化方法(包括查询方式语句结合)
判断插入值是否重复:
 
 CREATE PROCEDURE  IR_rb_User_UpdateUser
CREATE PROCEDURE  IR_rb_User_UpdateUser
 (
(
 @UserID        int,
    @UserID        int,
 @Name    nvarchar(50),
    @Name    nvarchar(50),
 @Email           nvarchar(100),
    @Email           nvarchar(100),
 @Password    nvarchar(20),
    @Password    nvarchar(20),
 @RoleID        int,
    @RoleID        int,
 @iSuccess    int output
    @iSuccess    int output
 )
)
 AS
AS

 set @iSuccess = -1    --判断是否成功有错误应为插入重复键
set @iSuccess = -1    --判断是否成功有错误应为插入重复键

 IF EXISTS (SELECT Email  FROM rb_Users WHERE Email = @Email and UserID<>@UserID)
IF EXISTS (SELECT Email  FROM rb_Users WHERE Email = @Email and UserID<>@UserID)
 BEGIN
BEGIN
 set @iSuccess = -2
  set @iSuccess = -2
 return
  return
 END
END

 BEGIN TRAN
BEGIN TRAN

 UPDATE    rb_Users  SET    Name   = @Name,    Email    = @Email,    Password = @Password  WHERE    UserID   = @UserID
    UPDATE    rb_Users  SET    Name   = @Name,    Email    = @Email,    Password = @Password  WHERE    UserID   = @UserID

 IF @@ERROR <> 0
    IF @@ERROR <> 0
 BEGIN
    BEGIN
 ROLLBACK TRAN
        ROLLBACK TRAN
 return
        return
 END
    END
 set @iSuccess = -3
    set @iSuccess = -3

 update rb_UserRoles set RoleID=@RoleID  where UserID=@UserID
    update rb_UserRoles set RoleID=@RoleID  where UserID=@UserID

 IF @@ERROR <> 0
    IF @@ERROR <> 0
 BEGIN
    BEGIN
 ROLLBACK TRAN
        ROLLBACK TRAN
 return
        return
 END
    END

 COMMIT TRAN
COMMIT TRAN

 set @iSuccess = 1
set @iSuccess = 1
 GO
GO

 
 
条件查询语句:
 
 CREATE PROCEDURE IR_SysAuthorization_GetAllSysAuthorization
CREATE PROCEDURE IR_SysAuthorization_GetAllSysAuthorization
 (
(
 @Type int,
    @Type int,
 @UserID varchar(20)
    @UserID varchar(20)
 )
)
 AS
 AS

 declare     @strsql    varchar(1500)        --临时sql语句
declare     @strsql    varchar(1500)        --临时sql语句
 declare     @strwhere    varchar(1000)        --临时sql的条件语句
declare     @strwhere    varchar(1000)        --临时sql的条件语句

 set @strsql = ''
set @strsql = ''
 set @strsql = @strsql + 'select UserID,Role,(select typename from SysAuthorizationType where type=t.type) as typeTmp, '
set @strsql = @strsql + 'select UserID,Role,(select typename from SysAuthorizationType where type=t.type) as typeTmp, '
 set @strsql = @strsql + '(CASE WHEN State = 1 THEN ' + '''有效''' + ' ELSE ' + '''无效''' + ' END) AS StateTmp '
set @strsql = @strsql + '(CASE WHEN State = 1 THEN ' + '''有效''' + ' ELSE ' + '''无效''' + ' END) AS StateTmp '
 set @strsql = @strsql + 'FROM SysAuthorization t '
set @strsql = @strsql + 'FROM SysAuthorization t '

 set @strwhere = ''
set @strwhere = ''


 IF  @UserID <> ''
IF  @UserID <> '' 
 BEGIN
BEGIN
 set @strwhere = @strwhere + ' and (UserID LIKE ' + '''' + '%' + @UserID + '%' + '''' + ')'
    set @strwhere = @strwhere + ' and (UserID LIKE ' + '''' + '%' + @UserID + '%' + '''' + ')'
 END
END

 IF  @Type >0
IF  @Type >0
 BEGIN
BEGIN
 set @strwhere = @strwhere + ' and Type =  ' + CAST(@Type AS varchar(12))
    set @strwhere = @strwhere + ' and Type =  ' + CAST(@Type AS varchar(12))
 END
END

 if @strwhere <>''
if @strwhere <>''
 BEGIN
BEGIN
 set @strsql = @strsql + ' where ' + right(@strwhere, len(@strwhere)-4)
    set @strsql = @strsql + ' where ' + right(@strwhere, len(@strwhere)-4)
 END
END

 --按用户名排序
--按用户名排序
 set  @strsql = @strsql + ' ORDER BY Type,UserID'
set  @strsql = @strsql + ' ORDER BY Type,UserID'

 exec (@strsql)
exec (@strsql)
 GO
GO

 CREATE PROCEDURE  IR_rb_User_UpdateUser
CREATE PROCEDURE  IR_rb_User_UpdateUser (
( @UserID        int,
    @UserID        int, @Name    nvarchar(50),
    @Name    nvarchar(50), @Email           nvarchar(100),
    @Email           nvarchar(100), @Password    nvarchar(20),
    @Password    nvarchar(20), @RoleID        int,
    @RoleID        int, @iSuccess    int output
    @iSuccess    int output )
) AS
AS
 set @iSuccess = -1    --判断是否成功有错误应为插入重复键
set @iSuccess = -1    --判断是否成功有错误应为插入重复键
 IF EXISTS (SELECT Email  FROM rb_Users WHERE Email = @Email and UserID<>@UserID)
IF EXISTS (SELECT Email  FROM rb_Users WHERE Email = @Email and UserID<>@UserID) BEGIN
BEGIN set @iSuccess = -2
  set @iSuccess = -2 return
  return END
END
 BEGIN TRAN
BEGIN TRAN
 UPDATE    rb_Users  SET    Name   = @Name,    Email    = @Email,    Password = @Password  WHERE    UserID   = @UserID
    UPDATE    rb_Users  SET    Name   = @Name,    Email    = @Email,    Password = @Password  WHERE    UserID   = @UserID
 IF @@ERROR <> 0
    IF @@ERROR <> 0 BEGIN
    BEGIN ROLLBACK TRAN
        ROLLBACK TRAN return
        return END
    END set @iSuccess = -3
    set @iSuccess = -3
 update rb_UserRoles set RoleID=@RoleID  where UserID=@UserID
    update rb_UserRoles set RoleID=@RoleID  where UserID=@UserID
 IF @@ERROR <> 0
    IF @@ERROR <> 0 BEGIN
    BEGIN ROLLBACK TRAN
        ROLLBACK TRAN return
        return END
    END
 COMMIT TRAN
COMMIT TRAN
 set @iSuccess = 1
set @iSuccess = 1 GO
GO

条件查询语句:

 CREATE PROCEDURE IR_SysAuthorization_GetAllSysAuthorization
CREATE PROCEDURE IR_SysAuthorization_GetAllSysAuthorization (
( @Type int,
    @Type int, @UserID varchar(20)
    @UserID varchar(20) )
) AS
 AS
 declare     @strsql    varchar(1500)        --临时sql语句
declare     @strsql    varchar(1500)        --临时sql语句 declare     @strwhere    varchar(1000)        --临时sql的条件语句
declare     @strwhere    varchar(1000)        --临时sql的条件语句
 set @strsql = ''
set @strsql = '' set @strsql = @strsql + 'select UserID,Role,(select typename from SysAuthorizationType where type=t.type) as typeTmp, '
set @strsql = @strsql + 'select UserID,Role,(select typename from SysAuthorizationType where type=t.type) as typeTmp, ' set @strsql = @strsql + '(CASE WHEN State = 1 THEN ' + '''有效''' + ' ELSE ' + '''无效''' + ' END) AS StateTmp '
set @strsql = @strsql + '(CASE WHEN State = 1 THEN ' + '''有效''' + ' ELSE ' + '''无效''' + ' END) AS StateTmp ' set @strsql = @strsql + 'FROM SysAuthorization t '
set @strsql = @strsql + 'FROM SysAuthorization t '
 set @strwhere = ''
set @strwhere = ''

 IF  @UserID <> ''
IF  @UserID <> ''  BEGIN
BEGIN set @strwhere = @strwhere + ' and (UserID LIKE ' + '''' + '%' + @UserID + '%' + '''' + ')'
    set @strwhere = @strwhere + ' and (UserID LIKE ' + '''' + '%' + @UserID + '%' + '''' + ')' END
END
 IF  @Type >0
IF  @Type >0 BEGIN
BEGIN set @strwhere = @strwhere + ' and Type =  ' + CAST(@Type AS varchar(12))
    set @strwhere = @strwhere + ' and Type =  ' + CAST(@Type AS varchar(12)) END
END
 if @strwhere <>''
if @strwhere <>'' BEGIN
BEGIN set @strsql = @strsql + ' where ' + right(@strwhere, len(@strwhere)-4)
    set @strsql = @strsql + ' where ' + right(@strwhere, len(@strwhere)-4) END
END
 --按用户名排序
--按用户名排序 set  @strsql = @strsql + ' ORDER BY Type,UserID'
set  @strsql = @strsql + ' ORDER BY Type,UserID'
 exec (@strsql)
exec (@strsql) GO
GO
 
                    
                     
                    
                 
                    
                
 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号