跪等高手,100分送,关于主子表的主外键关联
有两个表
主表:(AID 为主键)
create table A(
AID int, --日志编号
WORKDATE varchar(10), --工作日期
QUESTION varchar(500), --问题或建议
)
子表:(BID 为主键,AID 为外键)
create table B(
BID int, --任务编号
AID int, --日志编号
TASKNAME int, --任务描述
)
需求:
主表A的A.WORKDATE字段默认为当天日期,主表A的记录每天只增加一条(由A.WORKDATE来进行判断,如果A.WORKDATE为当前日期的话则不再向A表中填加记录);
子表B的记录在表A已经增加记录的前提下与A关联,在A只增加一条记录的情况下
可以增加多条记录(就是一个B.AID可以对应多个B.BID,可以用判断A.AID是否为0来增加表B中的记录---因为INT为NULL是系统默认其为0).
我给各位高手跪下了,请帮我写下SQL语句吧,我用的是SERVER2000数据库.有100分赠
------解决方案--------------------要约束A表每天只能INSERT一条记录,可以为 WORKDATE 字段建UNIQUE约束。
至于B表,Insert语句可以这样写:
insert into B(BID,AID,TASKNAME)
select isnull(count(*),0)+1,@AID,@TASKNAME from B where AID=@AID
------解决方案--------------------INSERT 主表(WORKDATE) SELECT CONVERT(VARCHAR(10),GETDATE(),120)
------解决方案--------------------主表A的A.WORKDATE字段默认为当天日期是怎样在表中实现的
---
getdate()
------解决方案----------------------可以这样来建立A表:
CREATE TABLE [dbo].[A] (
[AID] [int] IDENTITY (1, 1) NOT NULL ,
[WORKDATE] [varchar] (10) NOT NULL ,
[QUESTION] [varchar] (500) NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[A] WITH NOCHECK ADD
CONSTRAINT [DF_A_WORKDATE] DEFAULT (convert(varchar(10),getdate(),112)) FOR [WORKDATE],
CONSTRAINT [IX_A] UNIQUE NONCLUSTERED
(
[WORKDATE]
) ON [PRIMARY]
GO
------解决方案--------------------INSERT 主表(WORKDATE) SELECT CONVERT(VARCHAR(10),GETDATE(),120)
WHERE NOT EIXTS(SELECT 0 FROM 主表 WEHRE DATEDIFF(DD,WORKDATE,GETDATE()) <> 0)
就只能插入一条,你讲得不是很清楚,也可象子陌说的建UNIQUE约束,具体操作在表设计时的索引中
------解决方案--------------------首先,判断A表中是否有当前日期的记录存在,如果没有,插入一条,如果有,得到@AID
然后,insert into B(BID,AID,TASKNAME)
select isnull(count(*),0)+1,@AID,@TASKNAME from B where AID=@AID
------解决方案--------------------各位高人请看我的理解对吗:
首先,INSERT 主表(WORKDATE) SELECT CONVERT(VARCHAR(10),GETDATE(),120);
然后,为WORDATE建UNIQUE约束.
用以上两步对吗?
------------------------------------------------
不对,在创建表的时候就指定缺省值,并创建唯一索引,如我上面提供的建表脚本所示。
在Insert操作时,只需要使用以下语句:
Insert into A(QUESTION) values( 'QUESTION的内容 ')
以下是一个示例:
--当天第一次执行A表的Insert操作
Insert into A(QUESTION) values( 'QUESTION的内容1 ')
--查看执行结果
select * from A
/*
AID WORKDATE QUESTION
----------- ---------- -----------------
1 20070907 QUESTION的内容1
*/
--当天第二次执行A表的Insert操作
Insert into A(QUESTION) values( 'QUESTION的内容2 ')
/*
违反了 UNIQUE KEY 约束 'IX_A '。不能在对象 'A ' 中插入重复键。