a表里有个NAME字段char(20),要求在插入和更改此表字段时里面的内容必须是'wang','cheng','ling','chui'信息,用约束做还是用触发器做限制好呢?如何写

解决方案 »

  1.   

    check name in('wang','cheng','ling','chui')
      

  2.   


    declare @t table(a varchar(5) check(a='wang' or a='cheng' or a='ling' or a='chui'))
    insert into @t select 's'
      

  3.   

    create table ta(col varchar(10) check(col in('wang','cheng','ling','chui')))goinsert ta select 'adf'INSERT 语句与 COLUMN CHECK 约束 'CK__ta__col__05097C20' 冲突。该冲突发生于数据库 'CSDN_TEST',表 'ta', column 'col'。
    语句已终止。
    insert ta select 'wang'(所影响的行数为 1 行)
    drop table ta
      

  4.   

    --drop table index_tb
    create table index_tb(id int constraint ck_id default 0,name varchar(20),xb varchar(2))
    --查看表
    exec sp_helpindex orders--索引
    exec   sp_helpconstraint  index_tb --约束
    exec   sp_fkeys   'dbo.Person'--外键
    --键不唯一,非聚集索引
    create index id_index on index_tb(id)
    --删除索引
    drop index index_tb.id_index
    --键聚集索引
    create clustered index id_index on index_tb(id) 
    --删除索引
    drop index index_tb.id_index
    --创建check约束
    alter table index_tb add constraint ck_index CHECK (name like '[0-9][0-9][0-9][0-9][0-9]')
    alter table index_tb add constraint ck2_index check(xb in ('MM','GG'))
    --删除check约束
    alter table index_tb drop constraint ck2_index
    --禁止表约束
    alter table index_tb nocheck constraint ck_index
    --恢复表约束
    alter table index_tb check constraint ck_index
    --禁止和恢复所有check-all关键字
    select 'alter table '+name+' nocheck or check constraint all' from sysobjects where type='U'
    --添加新默认值和约束
    ALTER TABLE index_tb ADD CONSTRAINT de_name  DEFAULT ('11111') FOR name
    --删除表约束
    alter table index_tb drop constraint de_name
    -- 字段  UNIQUE NOT NULL = PRIMARY KEY 差不多  
    insert into index_tb(name,xb) select '12345','mm'select * from index_tbdelete index_tb
      

  5.   


    --or
    declare @t table(a varchar(5) check (in('wang','cheng','ling','chui')))
    insert into @t select 's'
      

  6.   


    /*
    当然用check约束了 用触发器的话要加个更新和插入的触发器'wang','cheng','ling','chui'
    这几个最长的字符也才5个 用char(20)似乎浪费了点
    */
    CREATE TABLE [tableTest]
    (
    [name] CHAR(20),
    CHECK([name] IN('wang','cheng','ling','chui'))
    )
    goDROP TABLE [tableTest]
      

  7.   

    最好用约束。。
    用触发器也可以实玩
    ---
    create trigger tr_t on t
    after insert,update
    as
    if exists(select 1 from inserted where Name in('wang','cheng','ling','chui'))
    begin
    raiserror 50005 N'插入失败'
    rollback 
    end
      

  8.   

    a表是已经建好的,我在企业管理器里新建的约束,在代码里输入 (name='wang' or name='cheng' or name'ling' or name='chui')
    a表有10000多条记录,最后出现没有反应现像,是不是语句不对啊,已经有表了,在建约束怎么整啊
      

  9.   

    hao wu yi wen yong yue shu hao.yue shu shi qian chu fa,chu fa qi shi hou chu fa.
    bing qie chu fa qi hui zeng jia xi tong wei hu de nan du.
      

  10.   


    用check和约束都可以实现还是用check比较好点
      

  11.   

    CHECK 性能好 联系的紧