[英]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.