哪里可以在SQL Server上的information_schema中找到检查约束信息?

时间:2017-01-18 05:24:27

标签: sql sql-server sql-server-2008 information-schema

我正在使用SQL Server作为应用程序。我的数据库中有一个名为FieldOptions的列。此列的行为类似于MySQL中的enum列。以下是我将在名为TableName的表上重新创建此列的查询。

ALTER TABLE TableName 
ADD FieldsOptions VARCHAR(10) NOT NULL 
    CHECK (FieldsOptions IN ('Useful', 'Useless', 'Unknown'))

现在,我希望能够查询information_schema表以获取有效值。除了列信息之外,我还希望看到'Useful', 'Useless', 'Unknown'

我检查了INFORMATION_SCHEMA.COLUMNS表和INFORMATION_SCHEMA.TABLE_CONSTRAINTS,但没有找到提供有效选项的信息。

如何获取列的有效值?

2 个答案:

答案 0 :(得分:1)

尝试此查询时,应将有效选项放在以逗号分隔的字符串

SELECT 
 cl.*
,REPLACE(REPLACE(c.CHECK_CLAUSE, '[' + cl.COLUMN_NAME + ']=', ''), ' OR ', ',') AS Options
FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS cu 
INNER JOIN INFORMATION_SCHEMA.CHECK_CONSTRAINTS AS c on c.CONSTRAINT_NAME = cu.CONSTRAINT_NAME
                                                 AND c.CONSTRAINT_CATALOG = cu.TABLE_CATALOG
INNER JOIN INFORMATION_SCHEMA.COLUMNS AS cl ON cl.COLUMN_NAME = cu.COLUMN_NAME
                                           AND cl.TABLE_CATALOG = cu.TABLE_CATALOG
                                           AND cl.TABLE_NAME = cu.TABLE_NAME
WHERE cl.COLUMN_NAME = 'FieldsOptions'

答案 1 :(得分:0)

select definition 
from sys.check_constraints 
where name = (select cu.CONSTRAINT_NAME
              from INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE cu
              inner join INFORMATION_SCHEMA.CHECK_CONSTRAINTS c on c.CONSTRAINT_NAME=cu.CONSTRAINT_NAME 
              where COLUMN_NAME = 'FieldsOptions<Your Column Name>')