zoukankan      html  css  js  c++  java
  • sqlserver check约束 从基础到高级应用 总结 [转]

    原文地址

    http://blog.csdn.net/shuicaohui5/article/details/6321798

    1. 规定某 字段的数据必须是字母或者数字或者字母

    alter table 表名 add constraint 约束名 check(字段 like '%[0-9][a-z]%')

    上边是必须有字母和数字的,你可以加个:
    or 字段 like '%[0-9]%'
    or 字段 like '%[a-z]%'

    2. 时间约束 EndTime不能早于BeginTime

    EndTime>BeginTime or EndTime=BeginTime

    3.Int型字段,值减一且 int字段不小于0

    update table1 set a=a-1
    并增加check约束
    check (a<>0)

    4. 一列是CHECK约束:手动或自动;
    一列是Check约束:大于等于0

    alter table 表名 add constraint [约束名1] check(字段名1 in ('手动','自动'))
    alter table 表名 add constraint [约束名2] check(字段名2〉=0 or check(字段名2〉>0)

    5.一个年龄字段设check约束:
    alter table stu add constraint CK_stu_age check(age between 15 and 50)

    6. check 某字段的长度

    create proc pro_check_lengh
    (
    @in_no varchar(20),

    @out_rtn smallint output

    )
    as
    declare @len int
    set @len=len(@in_no)
    if @len='指定的长度'

    begin
    set out_rtn =0
    end
    else
    begin
    set out_rtn =1
    end

    7.删除SQL约束

    1)禁止所有表约束的SQL
    select 'alter table '+name+' nocheck constraint all' from sysobjects where type='U'

    2)删除所有表数据的SQL
    select 'TRUNCATE TABLE '+name from sysobjects where type='U'

    3)恢复所有表约束的SQL
    select 'alter table '+name+' check constraint all' from sysobjects where type='U'

    4)删除某字段的约束
    declare @name varchar(100)
    --DF为约束名称前缀
    select @name=b.name from syscolumns a,sysobjects b where a.id=object_id('表名') and b.id=a.cdefault and a.name='字段名' and b.name like 'DF%'
    --删除约束
    alter table 表名 drop constraint @name
    --为字段添加新默认值和约束
    ALTER TABLE 表名 ADD CONSTRAINT @name DEFAULT (0) FOR [字段名]对字段约束进行更改
    --删除约束
    ALTER TABLE tablename
    Drop CONSTRAINT 约束名
    --修改表中已经存在的列的属性(不包括约束,但可以为主键或递增或唯一)
    ALTER TABLE tablename
    alter column 列名 int not null
    --添加列的约束
    ALTER TABLE tablename
    ADD CONSTRAINT DF_tablename_列名 DEFAULT(0) FOR 列名
    --添加范围约束
    alter table tablename add check(性别 in ('M','F'))

    8. 一个邮编的约束: 5位数字

    ALTER TABLE dbo.ZIPCodes ADD CONSTRAINT CK_ZIPCodes_ZIPCode CHECK (ZIPCode like '[0-9] [0-9] [0-9] [0-9] [0-9]')

    9.日期范围约束(动态SQL形式)

    alter table '+@char1+' with nocheck add constraint '+@manage_flg1+@key1+@key2+@key3+@key4+@key5+@char9+' check ('+@char3+' >=''1900/01/01'' and '+@char3+' <=''2101/01/01'')'

    10.指定区分约束

    商品种类区分
    alter table m_item with nocheck add constraint pdm101600B check(item_flg in('0','1','2','3'))

    商品重要区分
    alter table m_item with nocheck add constraint pdm1011200B check((imp_flg in('0','1')) or (item_flg in ('2','3') and imp_flg ='1'))

    11.限定别的表的关联约束(约束+函数)

    --约束1: 元図1和元図2要和品目表的商品コード1和商品コード2 存在并且商品区分=机种
    --元図1
    alter table m_item with nocheck add constraint pdm101900C check(past_draw_cd1 = (dbo.FN_PDM_CHECK_M_ITEM(past_draw_cd1,past_draw_cd2,item_flg,'1','1')))
    --元図2
    alter table m_item with nocheck add constraint pdm1011000C check(past_draw_cd2 = (dbo.FN_PDM_CHECK_M_ITEM(past_draw_cd1,past_draw_cd2,item_flg,'2','1')))

    --约束2: --関連図番_工番和関連図番_番号要: 制番区分<>3,4的 品目表的商品コード1和商品コード2 存在并且商品区分=部品

    --関連図番_工番
    alter table t_part_cons_history with nocheck add constraint pdm1021400C check(
    (prc_kbn in('3','4') AND rel_draw_cd1 = (dbo.FN_PDM_CHECK_M_ITEM(rel_draw_cd1,rel_draw_cd2,'','1','2'))) or prc_kbn not in('3','4'))
    --関連図番_番号
    alter table t_part_cons_history with nocheck add constraint pdm1021500C check(
    (prc_kbn in('3','4') AND rel_draw_cd2 = (dbo.FN_PDM_CHECK_M_ITEM(rel_draw_cd1,rel_draw_cd2,'','2
    ','2'))) or prc_kbn not in('3','4'))

    CREATE FUNCTION [dbo].[FN_PDM_CHECK_M_ITEM]
    (
    @IN_ITEM_CD1 NVARCHAR(5), --品目コード1
    @IN_ITEM_CD2 NVARCHAR(10), --品目コード2
    @IN_ITEM_FLG NVARCHAR(1), --品目区分
    @TYPE_FLG NVARCHAR(1), --チェック区分(1:品目コード1をチェック、1以外:品目コード2をチェック)
    @SERVICE_KUBUN NVARCHAR(1) --品目区分制御(1:品目区分=1.2.3,1以外:指定の品目区分により)
    )
    RETURNS NVARCHAR(20)
    AS
    BEGIN
    DECLARE @OUT_RTN NVARCHAR(20)=''
    --
    IF @SERVICE_KUBUN = '1'
    BEGIN

    IF @TYPE_FLG='1'
    BEGIN
    SELECT @OUT_RTN=ITEM_CD1 FROM M_ITEM
    WHERE ITEM_CD1=@IN_ITEM_CD1 AND ITEM_CD2=@IN_ITEM_CD2 AND ITEM_FLG = @IN_ITEM_FLG
    END
    ELSE
    BEGIN
    SELECT @OUT_RTN=ITEM_CD2 FROM M_ITEM
    WHERE ITEM_CD1=@IN_ITEM_CD1 AND ITEM_CD2=@IN_ITEM_CD2 AND ITEM_FLG = @IN_ITEM_FLG
    END
    END
    ELSE
    BEGIN
    IF @TYPE_FLG='1'
    BEGIN
    SELECT @OUT_RTN=ITEM_CD1 FROM M_ITEM
    WHERE ITEM_CD1=@IN_ITEM_CD1 AND ITEM_CD2=@IN_ITEM_CD2 AND ITEM_FLG IN('1','2','3')
    END
    ELSE
    BEGIN
    SELECT @OUT_RTN=ITEM_CD2 FROM M_ITEM
    WHERE ITEM_CD1=@IN_ITEM_CD1 AND ITEM_CD2=@IN_ITEM_CD2 AND ITEM_FLG IN('1','2','3')
    END
    END
    RETURN @OUT_RTN
    END

    GO

  • 相关阅读:
    微信小程序HTTPS
    微信商城-1简介
    va_list
    Event log c++ sample.
    EVENT LOGGING
    Analyze Program Runtime Stack
    unknow table alarmtemp error when drop database (mysql)
    This application has request the Runtime to terminate it in an unusual way.
    How to check if Visual Studio 2005 SP1 is installed
    SetUnhandledExceptionFilter
  • 原文地址:https://www.cnblogs.com/Guroer/p/2518724.html
Copyright © 2011-2022 走看看