我不知道如何使用可选约束创建域名? 我试过了
CREATE DOMAIN idx INT CHECK (VALUE > 100 AND VALUE < 999);
但面对下面的错误 未知对象类型&#39; DOMAIN&#39;用于CREATE,DROP或ALTER语句。
答案 0 :(得分:2)
CREATE TYPE myType AS TABLE
(
idx INT,
CHECK (idx > 100 AND idx < 999)
)
或者您也可以创建规则并将它们绑定到您的类型。
CREATE TYPE [dbo].[myType]
FROM [INT] NOT NULL
GO
CREATE RULE multiplyByTen
AS @myType % 10 = 0
AND @myType > 100
AND @myType < 999
EXEC sp_bindrule 'multiplyByTen', 'myType'
答案 1 :(得分:1)
您可能需要查看this。
它解释了如何在sql-server
中创建类型。有3种类型。您尝试创建的那个不允许添加CHECK CONSTRAINT
。您需要改为使用rules。
在您的情况下,您应该使用下一个查询:
--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)
请注意,CREATE RULE
页面说:
此功能将在Microsoft SQL Server的未来版本中删除。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。我们建议您使用检查约束。通过使用CREATE TABLE或ALTER TABLE的CHECK关键字创建检查约束。有关更多信息,请参阅唯一约束和检查约束。