如何在SQL Server中创建存储过程?

时间:2019-01-29 12:58:14

标签: sql sql-server

我正在为我现在正在学习的项目创建存储过程以进行验证,其依据是不允许在LeaveTypeText中使用特殊字符。而且我希望LeaveTypeText不允许重复值,并通过删除两个字符之间的空格来基于LeaveTypeText更新LeaveTypeKey。

我该如何纠正?

ALTER PROCEDURE [dbo].[PreSaveAnd_AfterSave_Validation] (
    @FBFormId INT
    ,@PkId INT
    ,@TF_ProjectId INT
    ,@UserDetails NVARCHAR(MAX)
    ,@IsPostSave BIT
    ,@ContactId INT
    ,@Who NVARCHAR(100)
    ,@RoleId INT
    ,@Culture NVARCHAR(200)
    )
AS
BEGIN
    DECLARE @GlobalDateFormatCode INT
    DECLARE @ErrorMsg NVARCHAR(Max)

    SELECT @GlobalDateFormatCode = dbo.TF_FN_GetCurrentDateFormat()

    IF ISNULL(@IsPostSave, 0) = 0
    BEGIN
        DECLARE @ParaMeterTable TABLE (
            Id INT IDENTITY(1, 1) PRIMARY KEY
            ,ParameterName NVARCHAR(MAX)
            ,ParameterValue NVARCHAR(MAX)
            )

        INSERT INTO @ParaMeterTable (
            ParameterName
            ,ParameterValue
            )
        SELECT LTRIM(LEFT(Value, CHARINDEX('=', Value, 0) - 1)) AS ParameterName
            ,LTRIM(SUBSTRING(Value, CHARINDEX('=', Value, 0) + 1, LEN(Value))) AS ParameterValue
        FROM dbo.TF_FN_Split(@UserDetails, '||')
        WHERE ISNULl(Value, '') <> ''

        --SELECT * FROM @ParaMeterTable
        DECLARE @LeaveTypeText NVARCHAR(1000)
        DECLARE @LeaveTypeKey NVARCHAR(1000)

        --SELECT @LeaveTypeText = ParameterValue
        --FROM @ParaMeterTable
        --WHERE ParameterName LIKE '@LeaveTypeText%'
        --select @LeaveTypeKey = LeaveTypeKey from DBO.Master_LeaveType_Sample
        --SELECT @LeaveTypeText
        SET @ErrorMsg = ' "Leave Type Key" field does not allow Special characters '

        --Validate Here
        IF EXISTS (@LeaveTypeKey like '%$%')
        BEGIN
            SELECT 0 AS IsValid
                ,@ErrorMsg AS [ErrorMessage]
        END

        IF (ISNULL(@ErrorMsg, '') != '')
        BEGIN
            SELECT 0 AS IsValid
                ,@ErrorMsg AS [ErrorMessage]
        END
        ELSE
        BEGIN
            SELECT 1 IsValid
                ,dbo.TF_FN_GetCultureMessage('TF_DB_Success', @ContactId, @Who, @RoleId, @Culture) AS [ErrorMessage]
        END
    END
    ELSE IF ISNULL(@IsPostSave, 0) = 1
    BEGIN
        -- Post Save Logic
        UPDATE DBO.Master_LeaveType_Sample
        SET LeaveTypeKey = Replace(ParameterValue, ' ', '')
        FROM DBO.Master_LeaveType_Sample
        WHERE LeaveTypeText = ParameterValue

        SELECT 1 IsValid
            ,dbo.TF_FN_GetCultureMessage('TF_DB_Success', @ContactId, @Who, @RoleId, @Culture) AS [ErrorMessage]
    END
END

0 个答案:

没有答案