sqlserver 存储过程 增加

CREATE PROCEDURE [dbo].[InsertMessage](
@strTable varchar(50),         --表名
@strValues nvarchar(1000),     --要插入的数据(用英文逗号分隔),如果是字符串类型,需加单引号
@only_field varchar(20)=NULL,  --唯一性字段(列名)
@only_value varchar(20)=NULL,  --唯一性字段值
@msg nvarchar(50)=NULL         --错误消息
)
as
BEGIN SET NOCOUNT ON;
declare @sqlString varchar(5000);

IF @only_field is not null
    begin
        declare @p int;                    --查询唯一性结果
        declare @sql nvarchar(1000);       --拼接查询sql字串
        set @sql='SELECT @p=count(1) FROM ' +@strTable+' WHERE ' +@only_field+'='+@only_value;
        exec sp_executesql @sql,N'@p AS int OUTPUT',@p OUTPUT
    
        if @p > 0
            begin
                raiserror(@msg ,16,1)
                return
            end
        else
            begin
                set @sqlString = 'insert into '+@strTable+' values ('+@strValues+')';
                exec(@sqlString);
            end
    end
ELSE
    begin
        set @sqlString = 'insert into '+@strTable+' values ('+@strValues+')';
        exec(@sqlString);
    end
END

--execute [dbo].[InsertMessage] 'base._Member',"0,2,getdate(),0,1,'4445','654321','654321',N'邹柯00'",'AcctNbr','4445',N'会员卡号已存在,不能重复添加!'
--execute [dbo].[InsertMessage] 'base._Member',"0,2,getdate(),0,1,'4445','654321','654321',N'邹柯00'",NULL,NULL,NULL

 

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- 邹柯
Create PROCEDURE CollegeAdd
(
     @username NVarChar(10)
    ,@cardid VarChar(30)
    ,@age int
    ,@sex Char(1)
    ,@image_path  VarChar(50)
    ,@job_base_id int
    ,@level_base_id int
    ,@certificateid VarChar(15)
    ,@certificate_path VarChar(50)
    ,@BeginTime DateTime=null
    ,@EndTime DateTime=null
    ,@userid int out
    ,@ceid int out
)
WITH ENCRYPTION
AS
BEGIN
    SET NOCOUNT     ON;
    SET XACT_ABORT  ON;
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
    BEGIN TRY
        BEGIN    TRAN;    

        -- Add Tutor    
        insert into    Tutor
        (         Name,  IdentityCard,  Age,  Gender, Photo)
        values    (@username, @cardid, @age, @sex, @image_path);

        -- 获取自增ID
        select    @userid = scope_identity();

        -- Add Certificate
        insert into    Certificate
        (         TutorId,  JobId,  LevelId,  BeginTime,EndTime,Id, ImageUrl)
        values    (@userid, @job_base_id, @level_base_id,@BeginTime, @EndTime,@certificateid, @certificate_path);

        -- 获取自增ID
        select    @ceid = scope_identity();

        COMMIT    TRAN;
    END TRY
    BEGIN CATCH
        ROLLBACK TRAN; throw;
    END CATCH
END


/* 
USE [GmkCollege]
GO

DECLARE    @return_value int,
        @userid int,
        @ceid int

EXEC    @return_value = [dbo].[CollegeAdd]
        @username = '测试8',
        @cardid = '测试8',
        @age = 99,
        @sex = '女',
        @image_path = '测试8',
        @job_base_id = 2,
        @level_base_id = 2,
        @certificateid = '测试8',
        @certificate_path = '测试8',
        @BeginTime='2016-06-06',
        @EndTime='2017-01-01',
        @userid = @userid OUTPUT,
        @ceid = @ceid OUTPUT

SELECT    @userid as N'@userid',
        @ceid as N'@ceid'

SELECT    'Return Value' = @return_value

GO 
*/

 

-- 邹柯
Create PROCEDURE AddSignUpInfo
(
    --UserInfo
     @Name NVarChar(18)=null           
    ,@IdCard VarChar(18)=null     
    ,@Gender Char(2)=null                 
    ,@Area NVarChar(30)=null          
    ,@Nation NVarChar(15)=null         
    ,@Hobby NVarChar(50)=null         
    ,@BirthDate DateTime=null         
    ,@Phone VarChar(11)=null           
    ,@TrainStatus Char(2)=null      
    --UserTransInfo      
    ,@TransOrganizate NVarChar(30)=null
    ,@Certicate NVarChar(30)=null     
    ,@StartTime DateTime=null        
    ,@EndTime DateTime=null          
    ,@Expectation NVarChar(300)=null 
    ,@TransContent NVarChar(300)=null  
    --UserPayInfo
    ,@OrderNo Varchar(30)=null    
    ,@Type Int=1
    ,@Amount Int=null
    ,@Currency Int=2
    ,@Method Int=1
    ,@Status Int=1
)
WITH ENCRYPTION
AS
BEGIN
    SET NOCOUNT     ON;
    SET XACT_ABORT  ON;
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
    BEGIN TRY
        BEGIN    TRAN;    
        --声明用户ID变量
        declare @UID int=null;
        declare @INFO1 int=null;
        declare @INFO2 int=null;
        declare @INFO3 int=null;

        --根据身份证号获取用户ID
        SELECT @UID=ID FROM UserCaptcha WHERE IdCard=@IdCard;

        --根据用户ID查询该用户之前是否已添加过报名信息--只是未支付成功或其他原因导致这条信息无效
        SELECT @INFO1=Count(1) FROM UserInfo WHERE UID=@UID;
        SELECT @INFO2=Count(1) FROM UserTransInfo WHERE UID=@UID;
        SELECT @INFO3=Count(1) FROM UserPayInfo WHERE UID=@UID;

        if @INFO1 = 0 
            begin
                -- Add UserInfo    
                insert into    UserInfo(
                        [UId]
                        ,[Name]
                        ,[Gender]
                        ,[Nation]
                        ,[Area]
                        ,[Hobby]
                        ,[BirthDate]
                        ,[Phone]
                        ,[TrainStatus]
                )
                values(
                        @UID
                        ,@Name
                        ,@Gender
                        ,@Nation
                        ,@Area
                        ,@Hobby
                        ,@BirthDate
                        ,@Phone
                        ,@TrainStatus
                )
            end    
        else
            begin
                -- Update UserInfo    
                Update UserInfo SET
                       [Name]=@Name
                      ,[Gender]=@Gender
                      ,[Nation]=@Nation
                      ,[Area]=@Area
                      ,[Hobby]=@Hobby
                      ,[BirthDate]=@BirthDate
                      ,[Phone]=@Phone
                      ,[TrainStatus]=@TrainStatus
                  Where UId=@UID
            end


        if @INFO2 = 0
            begin
                -- Add UserTransInfo
                insert into    UserTransInfo(
                       [UId]
                      ,[TransOrganizate]
                      ,[Certicate]
                      ,[TransContent]
                      ,[Expectation]
                      ,[StartTime]
                      ,[EndTime]
                )
                values(
                       @UID
                      ,@TransOrganizate
                      ,@Certicate
                      ,@TransContent
                      ,@Expectation
                      ,@StartTime
                      ,@EndTime
                );
            end
        else
            begin
                -- Update UserTransInfo
                Update UserTransInfo SET 
                       [TransOrganizate]=@TransOrganizate
                      ,[Certicate]=@Certicate
                      ,[TransContent]=@TransContent
                      ,[Expectation]=@Expectation
                      ,[StartTime]=@StartTime
                      ,[EndTime]=@EndTime
                Where UId=@UID
            end

        if @INFO3 = 0
            begin
                -- Add UserPayInfo
                insert into    UserPayInfo(
                       [UId]
                      ,[OrderNo]
                      ,[Type]
                      ,[Amount]
                      ,[Currency]
                      ,[Method]
                      ,[Status]
                )
                values(
                       @UID
                      ,@OrderNo
                      ,@Type
                      ,@Amount
                      ,@Currency
                      ,@Method
                      ,@Status
                );
            end
        else
            begin
                -- Update UserPayInfo
                Update UserPayInfo SET 
                       [OrderNo]=@OrderNo
                      ,[Type]=@Type
                      ,[Amount]=@Amount
                      ,[Currency]=@Currency
                      ,[Method]=@Method
                      ,[Status]=@Status
                Where UId=@UID
            end
        COMMIT    TRAN;
    END TRY
    BEGIN CATCH
        ROLLBACK TRAN; throw;
    END CATCH
END

/*
USE [GmkCollege]
GO

DECLARE    @return_value int

EXEC    @return_value = [dbo].[AddSignUpInfo]
        @Name = 'zouke',
        @IdCard = '111111',
        @Gender = 1,
        @Area = 'zzzzzzzz',
        @Nation = '汉族',
        @Hobby = '足球、篮球呢',
        @BirthDate = '2016-01-01',
        @Phone = '18761939022',
        @TrainStatus = 1,
        @TransOrganizate = 'GMK',
        @Certicate = '理疗师',
        @StartTime = '2011-01-01',
        @EndTime = '2012-01-01',
        @Expectation = 'cccccccc',
        @TransContent = 'ddddddd',
        @OrderNo="2222222222",
        @Type=1,
        @Amount=100,
        @Currency=2,
        @Method=1,
        @Status=1,

SELECT    'Return Value' = @return_value

GO
*/

 

posted @ 2017-08-31 17:12  邹柯  阅读(792)  评论(0编辑  收藏  举报