是否有办法获得CHECK
约束的值
CONSTRAINT TheCollumn CHECK (TheCollumn IN('One','Two','Three') )
我想从查询中获得'One' 'Two' 'Three'
,然后我可以使用它来填充下拉列表,而无需重新输入下拉列表中的值
我认为你需要一个外键约束和一个引用表:
create table refTheColumn (
name varchar(255) primary key
);
. . .
constraint fk_thecolumn foreign key (theColumn) references refTheColumn(name);
这是一个坏主意,但这是一般的方法:
USE tempdb
CREATE TABLE #tmp (v varchar(50));
ALTER TABLE #tmp ADD CONSTRAINT TheCollumn CHECK(v IN ('One', 'Two', 'Three'));
GO
SELECT definition FROM sys.check_constraints WHERE Name = 'TheCollumn'
将输出:
([v]='Three' OR [v]='Two' OR [v]='One')
您必须在代码中解析它(但在SQL中解析它将非常具有挑战性和不明智)。正如Gordon Lindoff所建议的那样,外键绝对更干净/更容易使用。
这是一个坏主意的更多原因:
- 如果检查约束定义不同,它可能以不同的方式存储它(因此Damien_The_Unbeliever关于需要SQL解析器的观点)。例如,它可能是AND子句,或者它可能指向一个函数(考虑
[v] = right(SomeOtherColumn, 5)
,现在你必须解释它) -
sys
表(sys.check_constraints
)在未来的版本中可能会更改,并且不被认为是访问此数据的可靠方法。您的代码可能无法幸免于SQL升级(而使用引用表则可以)。更糟糕的是,它可能不会在改变SQL server功能的升级时抛出异常,但它可能会产生一个难以追踪或跨环境重现的bug(即prod升级但dev没有)。