SQL点滴28—一个简单的存储过程

原文: SQL点滴28—一个简单的存储过程

在表中写入一条数据同事要向另外一个表中写入信息,所以会使用到事务。实际使用的时候还会一次向一个表中吸入多条数据,下面的存储过程,将字符串拆分成数组然后写入到表中。

/****** Object:  StoredProcedure [dbo].[sp_InsertEmployee]    Script Date: 09/17/2012 23:28:42 ******/

SET ANSI_NULLS ON

GO



SET QUOTED_IDENTIFIER ON

GO



-- =============================================

-- Author:        <Author,,Name>

-- Create date: <Create Date,,>

-- Description:    插入一条雇员数据

-- =============================================

CREATE PROCEDURE [dbo].[sp_InsertEmployee]

-- Add the parameters for the stored procedure here

@Name varchar(50),

@UserName varchar(50),

@Password varchar(50),

@Hierarchy char(1),

@EmployeeTypeID int,

@Sex varchar(5),

@Telphone varchar(20),

@CellPhone varchar(20),

@QQ varchar(20),

@Email varchar(50),

@Statue varchar(20),

@Remark varchar(50),

@ManagerID int,

@Regions varchar(1000)

AS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

SET NOCOUNT ON;

declare @ID int

declare @tempSql varchar(2000)



-- Insert statements for procedure here

if exists(select * from Employee where Name=@Name)

    return 0

begin transaction



    insert into [Employee](

    [Name],[UserName],[Password],[Hierarchy],[EmployeeTypeID],[Sex],[Telphone],[CellPhone],[QQ],[Email],[Statue],[Remark],[ManagerID]

    )values(

    @Name,@UserName,@Password,@Hierarchy,@EmployeeTypeID,@Sex,@Telphone,@CellPhone,@QQ,@Email,@Statue,@Remark,@ManagerID

    )

    set @ID = @@IDENTITY

    if exists(select * from Permission where ID=@ID)

    begin

        delete from Permission where EmployeeID=@ID

    end

    else

    begin

        set @tempSql='insert into Permission select '+str(@ID)+', '''+replace(@Regions,',','''union select '+str(@ID)+',''')+''''

        exec(@tempSql)

    end

    

if @@ERROR>0

    begin

    rollback transaction

    end

else

    begin

    commit transaction

    end

    

END



GO

你可能感兴趣的:(存储过程)