我正在为我现在正在学习的项目创建存储过程以进行验证,其依据是不允许在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