簡體   English   中英

插入前驗證輸入數據的存儲過程

[英]Stored Procedure to Validate Input Data before insert

我正在嘗試編寫一個存儲過程來在插入表之前驗證數據。

我有一個 CHANGES 表,用戶將向其中插入值(基本上,如果我們系統中的某些表/列中存在錯誤數據,該用戶將向我們發送正確的數據以更新某些列)。 在可以將數據插入此 CHANGES 表之前,我想根據 LOOKUP 表驗證輸入數據。 該查找表本質上顯示了插入前接受的數據類型、列的長度等。

這是查找表:

ID 表名 列名 接受的數據類型 可接受長度
1 員工 年齡 INT
2 員工 中間名字 VARCHAR 50
3 大廈 VARCHAR 10

基本上 ID 是唯一標識符,因此如果用戶插入 ID 為 1,我們知道他們正在嘗試為員工表插入數據並對 AGE 列進行更正,在這種情況下,我們只想接受一個 int價值。

這是 CHANGES 表的結構:

ID PKFROMTABLE 新價值 用戶名
1 234 39 sk
1 345 約翰 傑夫
2 455 生物學 傑夫

我想把它包裝在一個存儲過程中:這就是我到目前為止所擁有的

CREATE PROCEDURE [dbo].[sp_CleanupData]
    (
    
    @ID int,
    @uniqueid VARCHAR(40),
    @value VARCHAR(50)


    )
AS
BEGIN TRANSACTION AddLoopback
DECLARE @columnlength int;
DECLARE @columndatatype varchar(30);
set @columnlength=(select acceptedlength from lookup where ID=@ID)
set @columndatatype=(select accepteddatatype from lookup where ID=@ID)

    IF len(@value) <= @columnlength
    
    BEGIN
        INSERT INTO [CHANGES] (ID, pkfromtable,newvalue,USERNAME) VALUES (@ID, @uniqueid, @value,SUSER_SNAME())
    PRINT 'New Record Inserted'
    COMMIT TRANSACTION
    END
ELSE
    BEGIN
ROLLBACK TRANSACTION AddLoopback
      PRINT 'id is not acceptable'
    END
GO

如何為數據類型添加驗證? 以及如何確保在插入之前通過所有驗證? 如果每條記錄的任何驗證都失敗,我不希望將該記錄插入到 CHANGES 表中。

你可以檢查每個數據類型,做這樣的事情

DECLARE @result BIT = 0;
IF @columndatatype = 'INT'
    SET @result = IIF(TRY_CAST(@value AS INT) IS NULL, 0, 1)
ELSE IF @columndatatype = 'BIGINT'
    SET @result = IIF(TRY_CAST(@value AS BIGINT) IS NULL, 0, 1)
ELSE IF @columndatatype = 'VARCHAR'
    SET @result = IIF(len(@value) <= @columnlength, 0, 1)
SELECT
    @result

如果轉換失敗,則轉換結果為 null,您將 @result 設置為 0。

完成檢查后,您就知道它的格式是否正確。

當然,您也可以使用 sp_executesql 以動態方式執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM