一、我先删除了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
未能创建约束。请参阅前面的错误信息。三、增加一个字段,作为主键,数据类型为字符,用作标识记录。因为实际操作中,每张材料检验记录表格,都有一个唯一的编号标识区别。 用什么函数好呢?达人可否写个例子参考下?
add constraint fk Foreign key(mkind_no) references rzs_mkindqc(mkind_no)
1, 给约束加个名称
alter table rzs_mkindper add constraint fk_xxx Foreign key(mkind_no) references rzs_mkindqc(mkind_no)
2,很明显了
你忘记了约束名
--创建得到当前日期的视图
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 行受影响)
*/
第三个
服务器: 消息 1753,级别 16,状态 1,行 1
列 'rzs_mkindqc.mkind_no' 与外键 'fk' 中引用列 'rzs_mkindper.mkind_no' 的长度不同。
服务器: 消息 1750,级别 16,状态 1,行 1
未能创建约束。请参阅前面的错误信息。
alter
table rzs_mkindper
add constraint fk
Foreign key(mkind_no) references rzs_mkindqc(mkind_no)
感谢feixianxxx 第二个中的问题我解决了。我再试一下你发的第3个问题的代码。
2. 第二问题, 表rzs_mkindper中的mkind_no 与 表rzs_mkindqc中的mkind_no 字段长度不一致3. 第三个问题, 没有现在的函数, 可以维护一张表, 里面就一个段字, 一条记录, 存在的是当前流水号, 每次使用时后都加1, 并发时对其加锁处理, 读取最新流水号后, 转换varchar型, 再组合一些字母, 组成有意义的唯一字段
呵呵,第一个是添加主键有约束名执行成功本身就没有问题的。只是对第二个问题参考下。
第二个问题根据大师们的指点是两个表字段不同,已经解决了。
第三个问题那时候我下班了,所以晚上回来的时候自己想了想,在后台数据库里本身表里有很多字段数 据怕影响,又感觉好像更复杂点。
所以我改在前台用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.
问题已经解决了哈哈。明天上班的时候分分给大家。