gpt4 book ai didi

sql-server - 重用检查约束

转载 作者:行者123 更新时间:2023-12-04 02:05:50 25 4
gpt4 key购买 nike

在 SQL Server 中假设一个列需要具有相同的数据类型,是否可以在表(或数据库级别)定义检查约束并在定义时将其应用于列?

如这个(人为的)示例:

ALTER TABLE dbo.tblAuditTrail
ADD CONSTRAINT CK_DecimalNumber
CHECK (DecimalColumn LIKE '^\-?\d+\.\d+$')
GO

现在如何将它与在表级别创建它的一个或多个列相关联,或者是使用 RULE 的答案。

CREATE RULE RU_Decimal
AS
@value LIKE '^\-?\d+\.\d+$'
GO

我知道这个例子是人为设计的,人们会为十进制值使用 decimal 列,但由于设计选择不当,假设这是一个 nchar 列,并且您想对其施加一些约束。

最佳答案

虽然规则确实满足您的要求,但它们现在已被弃用,取而代之的是普通的旧检查约束。如果您认为数据库可能需要移动到 SQL Server 的 future 版本,那么使用规则并不是一个好主意。请参阅 MSDN 文档顶部的“重要”消息:http://msdn.microsoft.com/en-us/library/ms188064.aspx .

您可以通过使用用户定义的函数并在所有检查约束中调用它来获得一些重用,但您仍然需要在它适用的所有列上显式定义检查约束。

CREATE FUNCTION IsDecimal(@input varchar(max))
RETURNS bit
AS
BEGIN
IF @value LIKE '^\-?\d+\.\d+$'
RETURN 1
ELSE
RETURN 0
END
GO

ALTER TABLE dbo.tblAuditTrail
ADD CONSTRAINT CK_DecimalNumber
CHECK (dbo.IsDecimal(DecimalColumn) = 1)
GO

关于sql-server - 重用检查约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3607937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com