首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

跪等高手,100分送,关于主子表的主外键关联解决方案

2012-01-22 
跪等高手,100分送,关于主子表的主外键关联有两个表主表:(AID为主键)createtableA(AIDint,--日志编号WORKDA

跪等高手,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 ' 中插入重复键。


语句已终止。
*/

--查看执行结果
select * from A
/*
AID WORKDATE QUESTION
----------- ---------- -----------------
1 20070907 QUESTION的内容1
*/

热点排行