SQL语句(Insert/Join/Union All???)
早上好 我有两个web表单(WeeklyAgenda和MonthlyAgenda),用于保存会议记录,这两个表单在我的数据库中都是单独的表。这些网页还允许用户将操作添加到我的数据库中的操作表中 更新数据时,会议记录和操作都有一个单独的按钮分配给它们。“操作”区域仅允许用户添加三个字段(操作、所有者和Targetdate) “我的操作”表有我要填充的其他列(AgendaID、agendaate、AgendaTypeDescription和ActionStatusID)。这些附加列已在网页上提供,因为它们是用户已填写的议程表单的一部分 我希望通过尝试获取这些字段(AgendaID、AgendaDate、AgendaTypeDescription和ActionStatusID)来节省我自己和Joe Bloggs的时间,而不是将这些字段再次添加到我的操作区域并让用户再次添加这些字段已经添加了两个议程表,并提取它们,以某种方式将它们与剩余字段(Action、Owner和Targetdate)一起导入,然后将它们添加到Action表中 基本上,数据已经存在,但分布在三个表中 我一直在尝试在存储过程中在这些表之间建立连接,以便将额外的文件插入到Actions表中 我不太确定如何完成这一点,并已尝试加入和联合所有,但没有设法让这一工作 我知道我需要从WeeklyAgenda表和MonthlyAgenda表中加入AgendaID、Agendate和AgendaTypeDescription 这是我到目前为止为action table存储过程编写的代码(该过程不需要额外的字段) 这就是我想把它改成的SQL语句(Insert/Join/Union All???),sql,sql-server,sql-server-2008,sql-server-2005,Sql,Sql Server,Sql Server 2008,Sql Server 2005,早上好 我有两个web表单(WeeklyAgenda和MonthlyAgenda),用于保存会议记录,这两个表单在我的数据库中都是单独的表。这些网页还允许用户将操作添加到我的数据库中的操作表中 更新数据时,会议记录和操作都有一个单独的按钮分配给它们。“操作”区域仅允许用户添加三个字段(操作、所有者和Targetdate) “我的操作”表有我要填充的其他列(AgendaID、agendaate、AgendaTypeDescription和ActionStatusID)。这些附加列已在网页上提供,因
Alter PROCEDURE [dbo].[Add_Action_Insert_Test]
@ActionID INT OUTPUT,
@AgendaID INT,
@AgendaDate DATETIME,
@AgendaTypeDescription VARCHAR(50),
@Action VARCHAR(MAX),
@Owner VARCHAR(50),
@TargetDate DATETIME,
@ActionStatusID INT
AS
INSERT INTO Action (
AgendaID,
AgendaDate,
AgendaTypeDescription,
Action,
Owner,
TargetDate,
ActionStatusID)
VALUES (
@AgendaID,
@AgendaDate,
@AgendaTypeDescription,
@Action,
@Owner,
@TargetDate,
@ActionStatusID)
SELECT @ActionID = scope_identity()
这是我现在数据库中数据的图像。。。
这是我想要的数据库中的图像。。。
我会通知你我得到的任何信息和帮助。我只是不确定我是否需要从另外两个TANLE中插入此附加信息,或者进行连接
非常感谢。
Betty我不知道为什么还要将AgendaDate和AgendaTypeDescription列分发到Action表。这两栏应该只保留在议程表中。然后,从Action表检索数据时,您将按如下方式连接议程表:
SELECT ac.AgendaID, ag.AgendaDate, ag.AgendaTypeDescription, ag.Action, ac.Ownder, ac.TargetDate
FROM MonthlyAgenda AS ag
JOIN Action AS ac ON ag.AgendaID = ac.AgendaID
UNION
SELECT ac.AgendaID, ag.AgendaDate, ag.AgendaTypeDescription, ag.Action, ac.Ownder, ac.TargetDate
FROM WeeklyAgenda AS ag
JOIN Action AS ac ON ag.AgendaID = ac.AgendaID
ALTER PROCEDURE [dbo].[Add_Action_Insert_Test]
@ActionID INT OUTPUT,
@AgendaID INT,
@Action VARCHAR(MAX),
@Owner VARCHAR(50),
@TargetDate DATETIME,
@ActionStatusID INT
AS
INSERT INTO Action (
AgendaID,
AgendaDate,
AgendaTypeDescription,
Action,
Owner,
TargetDate,
ActionStatusID)
SELECT
@AgendaID,
AgendaDate,
AgendaTypeDescription,
@Action,
@Owner,
@TargetDate,
@ActionStatusID
FROM MonthlyAgenda WHERE AgendaID = @AgendaID
UNION
SELECT
@AgendaID,
AgendaDate,
AgendaTypeDescription,
@Action,
@Owner,
@TargetDate,
@ActionStatusID
FROM WeeklyAgenda WHERE AgendaID = @AgendaID
SELECT @ActionID = scope_identity()
如果决定保留动作表中的agendate和AgendaTypeDescription,则至少需要在add_Action_Insert_测试过程中添加一个参数@AgendaID,以确定该动作属于哪个议程
然后,您的过程将如下所示:
SELECT ac.AgendaID, ag.AgendaDate, ag.AgendaTypeDescription, ag.Action, ac.Ownder, ac.TargetDate
FROM MonthlyAgenda AS ag
JOIN Action AS ac ON ag.AgendaID = ac.AgendaID
UNION
SELECT ac.AgendaID, ag.AgendaDate, ag.AgendaTypeDescription, ag.Action, ac.Ownder, ac.TargetDate
FROM WeeklyAgenda AS ag
JOIN Action AS ac ON ag.AgendaID = ac.AgendaID
ALTER PROCEDURE [dbo].[Add_Action_Insert_Test]
@ActionID INT OUTPUT,
@AgendaID INT,
@Action VARCHAR(MAX),
@Owner VARCHAR(50),
@TargetDate DATETIME,
@ActionStatusID INT
AS
INSERT INTO Action (
AgendaID,
AgendaDate,
AgendaTypeDescription,
Action,
Owner,
TargetDate,
ActionStatusID)
SELECT
@AgendaID,
AgendaDate,
AgendaTypeDescription,
@Action,
@Owner,
@TargetDate,
@ActionStatusID
FROM MonthlyAgenda WHERE AgendaID = @AgendaID
UNION
SELECT
@AgendaID,
AgendaDate,
AgendaTypeDescription,
@Action,
@Owner,
@TargetDate,
@ActionStatusID
FROM WeeklyAgenda WHERE AgendaID = @AgendaID
SELECT @ActionID = scope_identity()
在本例中,我假设WeeklyAgenda和MonthlyAgenda中的AgendaId值是析取的。这意味着来自WeeklyAgenda的任何AgendaID都不能在MonthlyAgenda内出现,反之亦然。例如,您可以在一个表中使用偶数ID,在另一个表中使用奇数ID(在列的标识属性上使用一些高级设置)。如果您还可以包括WeeklyAgenda和MonthlyAgenda的结构,这将有所帮助,以及用于填充ActionID=23的空列的行示例。