100分 求sql简单问题!!!急,3Q了!

fenshm 2009-07-30 04:24:12

一、我先删除了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
未能创建约束。请参阅前面的错误信息。

三、增加一个字段,作为主键,数据类型为字符,用作标识记录。因为实际操作中,每张材料检验记录表格,都有一个唯一的编号标识区别。

用什么函数好呢?达人可否写个例子参考下?
...全文
156 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjybushiren88888 2009-07-30
  • 打赏
  • 举报
回复
深刻学习勒
findusefulthings 2009-07-30
  • 打赏
  • 举报
回复
学习了。JF
guguda2008 2009-07-30
  • 打赏
  • 举报
回复
T-MAC果然强HOHO
feixianxxx 2009-07-30
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 fenshm 的回复:]
引用 15 楼 tomzzu 的回复:
1. 第一个问题, 没有给约束加名字
SQL codealtertable rzs_mkindperaddconstraintFK_mkindperforeignkey(mkind_no)references rzs_mkindqc(mkind_no)

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.
    问题已经解决了哈哈。明天上班的时候分分给大家。
[/Quote]
good
fenshm 2009-07-30
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 tomzzu 的回复:]
1. 第一个问题, 没有给约束加名字
SQL codealtertable rzs_mkindperaddconstraintFK_mkindperforeignkey(mkind_no)references rzs_mkindqc(mkind_no)

2. 第二问题, 表rzs_mkindper中的mkind_no 与 表rzs_mkindqc中的mkind_no 字段长度不一致

3. 第三个问题, 没有现在的函数, 可以维护一张表, 里面就一个段字, 一条记录, 存在的是当前流水号, 每次使用时后都加1, 并发时对其加锁处理, 读取最新流水号后, 转换varchar型, 再组合一些字母, 组成有意义的唯一字段

[/Quote]

呵呵,第一个是添加主键有约束名执行成功本身就没有问题的。只是对第二个问题参考下。
第二个问题根据大师们的指点是两个表字段不同,已经解决了。
第三个问题那时候我下班了,所以晚上回来的时候自己想了想,在后台数据库里本身表里有很多字段数 据怕影响,又感觉好像更复杂点。
所以我改在前台用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.
问题已经解决了哈哈。明天上班的时候分分给大家。
zzz1975 2009-07-30
  • 打赏
  • 举报
回复
学习来了
Tomzzu 2009-07-30
  • 打赏
  • 举报
回复
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型, 再组合一些字母, 组成有意义的唯一字段
fenshm 2009-07-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 feixianxxx 的回复:]
你可以查看下 2个表的mkind_no字段定义的长度是不是一样

[/Quote]

感谢feixianxxx 第二个中的问题我解决了。

我再试一下你发的第3个问题的代码。
fenshm 2009-07-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 feixianxxx 的回复:]
你可以查看下 2个表的mkind_no字段定义的长度是不是一样

[/Quote]

哈哈 是的 我刚增加了前一个表字段的长度。我现在去改改试试。
htl258_Tony 2009-07-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 fenshm 的回复:]
第二个问题
我是用了2种方法,1是没加约束名出现的错误,2是加了约束名出现的错误。
[/Quote]
看看表内是不是有相关触发器约束着.
fenshm 2009-07-30
  • 打赏
  • 举报
回复
第二个问题
我是用了2种方法,1是没加约束名出现的错误,2是加了约束名出现的错误。
feixianxxx 2009-07-30
  • 打赏
  • 举报
回复
你可以查看下 2个表的mkind_no字段定义的长度是不是一样
xiequan2 2009-07-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fenshm 的回复:]
引用 1 楼 wufeng4552 的回复:
SQL codealtertable rzs_mkindperaddconstraint fkForeignkey(mkind_no)references rzs_mkindqc(mkind_no)

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

[/Quote]检查主外键关系的数据类型
--小F-- 2009-07-30
  • 打赏
  • 举报
回复
进来学习下

第3题应该这样:
alter 
table rzs_mkindper
add constraint fk
Foreign key(mkind_no) references rzs_mkindqc(mkind_no)
fenshm 2009-07-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wufeng4552 的回复:]
SQL codealtertable rzs_mkindperaddconstraint fkForeignkey(mkind_no)references rzs_mkindqc(mkind_no)
[/Quote]
运行了大师的代码,还是跟我问题二中的2错误相同。加不一样的约束名都会出现如下错误。
服务器: 消息 1753,级别 16,状态 1,行 1
列 'rzs_mkindqc.mkind_no' 与外键 'fk' 中引用列 'rzs_mkindper.mkind_no' 的长度不同。
服务器: 消息 1750,级别 16,状态 1,行 1
未能创建约束。请参阅前面的错误信息。
feixianxxx 2009-07-30
  • 打赏
  • 举报
回复
--以下代码生成的编号长度为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 行受影响)
*/

第三个
feixianxxx 2009-07-30
  • 打赏
  • 举报
回复
alter table rzs_mkindper add constraint kk Foreign key(mkind_no) references rzs_mkindqc(mkind_no)
你忘记了约束名
csdyyr 2009-07-30
  • 打赏
  • 举报
回复
二,
1, 给约束加个名称
alter table rzs_mkindper add constraint fk_xxx Foreign key(mkind_no) references rzs_mkindqc(mkind_no)
2,很明显了
htl258_Tony 2009-07-30
  • 打赏
  • 举报
回复
alter table rzs_mkindper add  Foreign key(mkind_no) references rzs_mkindqc(mkind_no)
如果不指定约束名,可以这样.
guguda2008 2009-07-30
  • 打赏
  • 举报
回复
帮顶,一定能解决,放心吧
加载更多回复(1)

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧