--First we create the rule.
CREATE RULE range_rule
AS
@range >= 100 AND @range < 999;
GO
--Then we create the user-defined data type
CREATE TYPE int_and_range FROM INT;
--Then we bind the rule to the data type.
EXEC sys.sp_bindrule @rulename=N'[dbo].[range_rule]', @objname=N'[dbo].[int_and_range]'
这样做之后,我们就可以进行这样的测试:
CREATE TABLE test_table (
custom_data_type_column int_and_range
)
--Try to insert a value against our rule
INSERT INTO dbo.test_table
( custom_data_type_column )
VALUES ( 10
)
--RESULT:
--A column insert or update conflicts with a rule imposed by a previous CREATE RULE statement. The statement was terminated.
--The conflict occurred in database 'db', table 'dbo.test_table', column 'custom_data_type_column'.
--The statement has been terminated.
--Inserting a valid data:
INSERT INTO dbo.test_table
( custom_data_type_column )
VALUES ( 100 )
--RESULT:
--(1 row(s) affected)
--Select
Select * FROM test_table
--RESULT:
custom_data_type_column
-----------------------
100
(1 row(s) affected)
2条答案
按热度按时间qhhrdooz1#
或者您也可以创建规则并将它们绑定到您的类型。
然后绑定规则
7fyelxc52#
你可能想看看这个。
它解释了如何在中创建类型
sql-server
. 有三种类型。您尝试创建的对象不允许添加CHECK CONSTRAINT
. 你需要用规则来代替。在您的情况下,您应该使用以下查询:
这样做之后,我们就可以进行这样的测试:
但要小心,
CREATE RULE
佩奇说:此功能将在microsoft sql server的未来版本中删除。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。我们建议您改用检查约束。检查约束是使用create table或alter table的check关键字创建的。有关详细信息,请参见唯一约束和检查约束。