一、我先删除了rzs_mkindper 表中的外键约束名,可以执行。alter table rzs_mkindper drop constraint FK__rzs_mkind__mkind__51755EDF 
二、我再添加就出现如下错误。1、alter table rzs_mkindper add constraint Foreign key(mkind_no) references rzs_mkindqc(mkind_no) 服务器: 消息 156,级别 15,状态 1,行 1
在关键字 'Foreign' 附近有语法错误。2、alter table rzs_mkindper add constraint FK__rzs_mkind__mkind__51755EDF Foreign key(mkind_no) references rzs_mkindqc(mkind_no) 服务器: 消息 1753,级别 16,状态 1,行 1
列 'rzs_mkindqc.mkind_no' 与外键 'FK__rzs_mkind__mkind__51755EDF' 中引用列 'rzs_mkindper.mkind_no' 的长度不同。
服务器: 消息 1750,级别 16,状态 1,行 1
未能创建约束。请参阅前面的错误信息。三、增加一个字段,作为主键,数据类型为字符,用作标识记录。因为实际操作中,每张材料检验记录表格,都有一个唯一的编号标识区别。   用什么函数好呢?达人可否写个例子参考下?

解决方案 »

  1.   

    alter table rzs_mkindper 
    add constraint fk Foreign key(mkind_no) references rzs_mkindqc(mkind_no)
      

  2.   

    alter table rzs_mkindper add  Foreign key(mkind_no) references rzs_mkindqc(mkind_no)如果不指定约束名,可以这样.
      

  3.   

    二,
    1, 给约束加个名称
    alter table rzs_mkindper add constraint fk_xxx Foreign key(mkind_no) references rzs_mkindqc(mkind_no) 
    2,很明显了
      

  4.   

    alter table rzs_mkindper add constraint kk Foreign key(mkind_no) references rzs_mkindqc(mkind_no) 
    你忘记了约束名
      

  5.   

    --以下代码生成的编号长度为12,前8位为日期信息,格式为YYMMDD,后4位为流水号。
    --创建得到当前日期的视图
    CREATE VIEW v_GetDate
    AS
    SELECT dt=CONVERT(CHAR(8),GETDATE(),112)
    GO--得到新编号的函数
    CREATE FUNCTION f_NextBH()
    RETURNS char(12)
    AS
    BEGIN
        DECLARE @dt CHAR(8)
        SELECT @dt=dt FROM v_GetDate
        RETURN(
            SELECT @dt+RIGHT(10001+ISNULL(RIGHT(MAX(BH),4),0),4) 
            FROM tb WITH(XLOCK,PAGLOCK)
            WHERE BH like @dt+'%')
    END
    GO--在表中应用函数
    CREATE TABLE tb(
    BH char(12) PRIMARY KEY DEFAULT dbo.f_NextBH(),
    col int)--插入资料
    INSERT tb(col) VALUES(1)
    INSERT tb(col) VALUES(2)
    INSERT tb(col) VALUES(3)
    DELETE tb WHERE col=3
    INSERT tb(col) VALUES(4)
    INSERT tb(BH,col) VALUES(dbo.f_NextBH(),14)--显示结果
    SELECT * FROM tb
    /*
    BH           col
    ------------ -----------
    200907290001 1
    200907290002 2
    200907290003 4
    200907290004 14(4 行受影响)
    */
    第三个
      

  6.   

    运行了大师的代码,还是跟我问题二中的2错误相同。加不一样的约束名都会出现如下错误。
    服务器: 消息 1753,级别 16,状态 1,行 1
    列 'rzs_mkindqc.mkind_no' 与外键 'fk' 中引用列 'rzs_mkindper.mkind_no' 的长度不同。
    服务器: 消息 1750,级别 16,状态 1,行 1
    未能创建约束。请参阅前面的错误信息。
      

  7.   

    进来学习下第3题应该这样:
    alter 
       table rzs_mkindper 
    add constraint fk 
        Foreign key(mkind_no) references rzs_mkindqc(mkind_no)
      

  8.   

    你可以查看下 2个表的mkind_no字段定义的长度是不是一样 
      

  9.   


    感谢feixianxxx 第二个中的问题我解决了。我再试一下你发的第3个问题的代码。
      

  10.   

    1. 第一个问题, 没有给约束加名字alter table rzs_mkindper add constraint FK_mkindper foreign key(mkind_no) references rzs_mkindqc(mkind_no)
    2. 第二问题, 表rzs_mkindper中的mkind_no 与 表rzs_mkindqc中的mkind_no 字段长度不一致3. 第三个问题, 没有现在的函数, 可以维护一张表, 里面就一个段字, 一条记录, 存在的是当前流水号, 每次使用时后都加1, 并发时对其加锁处理, 读取最新流水号后, 转换varchar型, 再组合一些字母, 组成有意义的唯一字段
      

  11.   


    呵呵,第一个是添加主键有约束名执行成功本身就没有问题的。只是对第二个问题参考下。
          第二个问题根据大师们的指点是两个表字段不同,已经解决了。
          第三个问题那时候我下班了,所以晚上回来的时候自己想了想,在后台数据库里本身表里有很多字段数 据怕影响,又感觉好像更复杂点。
                所以我改在前台用delphi已经弄好了,也是根据现有的流水号再加1。
         我贴下代码给大家看看。
          var
      str:string;
      m,n:integer;
    begin
      str:= formatdatetime('YYYYMMDD',date) ;
      m:=pos(str,edit2.Text);
      if m<>0 then
      begin
        n:=length(inttostr(strtoint(copy(edit2.Text,9,11))+1));
        case n of
             1: edit1.Text :=str+'00'+inttostr(strtoint(copy(edit2.Text,9,12))+1) ;
             2: edit1.Text :=str+'0'+inttostr(strtoint(copy(edit2.Text,9,12))+1) ;
             3: edit1.Text :=str+inttostr(strtoint(copy(edit2.Text,9,12))+1) ;
       end;
    end;
    end.
        问题已经解决了哈哈。明天上班的时候分分给大家。