Nul*_*ter -1 sql-server constraint data-integrity
我有一个带有文本框字段的桌面应用程序,它是一个带有掩码值的RadMaskedNumericInput#6,这意味着它只能有 6 位数字。我将它存储在int类型的数据库列中。
当我检查数据库时,列中的某些值是 -2147483648。
我已尝试输入许多值,但无法重现此场景。我只能在此屏幕中输入 6 位数字。我尝试了最大值 999999,但它保持不变。
我只是获取文本框值,将其转换为int,然后通过存储过程将其插入到数据库中。
int value = (int)txtPrice.value;
Run Code Online (Sandbox Code Playgroud)
我试图输入负值以及尝试添加字母,但由于掩码,它不允许我添加除整数以外的任何值。
根据我的理解和知识,只有桌面应用程序可以插入或更新此列的值。
有谁知道为什么会这样?我该如何预防?
SQL Server 不会将整数随机设置为 -2147483648。
无论如何,很明显你有一个应该被检查的约束,负价格是不好的。
首先清理具有无效值的行,然后您可以添加检查约束
ALTER TABLE YourTable
ADD CONSTRAINT CK_CheckPriceInRange CHECK(Price BETWEEN 0 AND 999999);
Run Code Online (Sandbox Code Playgroud)
现在,任何将其设置为无效值的尝试都将失败并显示错误。
你当然可以在你的存储过程中做类似的事情
IF @Price NOT BETWEEN 0 AND 999999
BEGIN
RAISERROR('Invalid Price %d',16,1,@Price);
RETURN;
END
Run Code Online (Sandbox Code Playgroud)
但是您仍然应该将检查约束作为最后一道防线,因此无论出现无效值,它都会停止。
| 归档时间: |
|
| 查看次数: |
460 次 |
| 最近记录: |