我想通过SQL语句获取表的CHECK约束请问大家怎么实现?

解决方案 »

  1.   

    这个不太清楚,只是实现过Check,还没有获取过,看看表的结构可以吗?
      

  2.   

    --开始测试过程
    begin tran testTrans--如果测试用表已经存在,则删除
    if exists(select id from sysobjects where id = object_id(N'TempTable'))
    drop table TempTable
    go--创建测试用表
    CREATE TABLE tempTable ( column_a INT) 
    GO--插入测试数据
    INSERT INTO tempTable VALUES (-1)
    GO--加入check约束
    ALTER TABLE tempTable WITH NOCHECK 
    ADD CONSTRAINT tempTable_check CHECK (column_a > 1)
    GO--从系统表sysobjects中取出约束名称;并联立系统表syscomments找到约束内容
    select o.name, c.text 
    from sysobjects o inner join
    syscomments C on o.id = c.id 
    where xtype = 'C' 
    GO--因为是测试数据;所以没必要让数据贮存数据库;所以回滚事务
    rollback tran testTrans
      

  3.   

    测试结果:
    tempTable_check ([column_a] > 1)
      

  4.   

    系统表sysobjects:数据库中所有对象的清单;
    syscomments: 视图,存储过程,触发器和函数的代码;sysobjects.type:  当值为C时表示是查找的check检查约束;
    syscomments.text: 对象的定义文本;select o.name,   --约束名称
           c.text    --定义文本
    from sysobjects o inner join
    syscomments C on o.id = c.id 
    where xtype = 'C' --查找约束类型
     and c.name = 'tempTable_check'  --如果知道约束的名称,则可以进行更精确的定位;/*  所以;楼上的完全正确;楼主可以揭帖了  */