如何创建varchar(8)类型的UDT,哪个值应该通过检查约束?
我需要那个,因为那个类型+约束会在几个表中被重用,我想避免重复,如下所示。
CREATE TABLE dbo.T1 (
<some columns>
, Comparison CHAR(4) NOT NULL
, CONSTRAINT CHK_tRule_Comparison CHECK (Comparison IN (
'Eq'
, 'Diff'
, 'Lt'
, 'Lte'
, 'Gt'
, 'Gte'
, 'Bgn'
, 'BgnR'
, 'End'
, 'EndR'
))
)
CREATE TABLE dbo.T2 (
<some columns>
, Comparison CHAR(4) NOT NULL
, CONSTRAINT CHK_tRule_Comparison CHECK (Comparison IN (
'Eq'
, 'Diff'
, 'Lt'
, 'Lte'
, 'Gt'
, 'Gte'
, 'Bgn'
, 'BgnR'
, 'End'
, 'EndR'
))
)
CREATE TABLE dbo.T3 (
<some columns>
, Comparison CHAR(4) NOT NULL
, CONSTRAINT CHK_tRule_Comparison CHECK (Comparison IN (
'Eq'
, 'Diff'
, 'Lt'
, 'Lte'
, 'Gt'
, 'Gte'
, 'Bgn'
, 'BgnR'
, 'End'
, 'EndR'
))
)
答案 0 :(得分:4)
无法向UDT添加检查约束,我建议您根本不使用UDT。如果你需要change it,悲伤是无止境的。
创建表RuleComparison
并在Comparison
列上添加外键约束。
create table RuleComparison
(
Value char(4) primary key
)
insert into RuleComparison
values ('Eq'),
('Diff'),
('Lt'),
('Lte'),
('Gt'),
('Gte'),
('Bgn'),
('BgnR'),
('End'),
('EndR')
create table T1
(
ID int identity primary key,
Comparison char(4) references RuleComparison(Value)
)
答案 1 :(得分:1)
您可以创建自定义数据类型。然后,使用CREATE RULE语句创建一个规则,在其中指定列可以接受的变量值。并通过SP_BINDRULE(系统过程),指定“创建角色的名称”和“用户类型的名称”(注意:规则不适用于数据库中已经创建的值) `
CREATE TYPE ChekNok
FROM varchar(5)
GO
CREATE RULE RulNok
AS
@per in ('fd','dff')
GO
EXEC SP_bindrule 'RulNok', 'ChekNok'
`