如何在sql中创建用户定义的类型

waxmsbnn  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(453)

我不知道如何创建具有可选约束的域?我试过了

CREATE DOMAIN idx INT CHECK (VALUE > 100 AND VALUE < 999);

但在create、drop或alter语句中使用了以下错误未知对象类型“domain”。

qhhrdooz

qhhrdooz1#

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'
7fyelxc5

7fyelxc52#

你可能想看看这个。
它解释了如何在中创建类型 sql-server . 有三种类型。您尝试创建的对象不允许添加 CHECK CONSTRAINT . 你需要用规则来代替。
在您的情况下,您应该使用以下查询:

--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关键字创建的。有关详细信息,请参见唯一约束和检查约束。

相关问题