0

大家早,

我有两个 Web 表单(WeeklyAgenda 和 MonthlyAgenda),其中包含会议记录,它们都是我数据库中的单独表格。这些网页还允许用户向我的数据库中的操作表添加操作。

更新数据时,会议纪要和行动都有一个单独的按钮分配给它们。Actions 区域允许用户仅添加三个字段(Action、Owner 和 Targetdate)。

我的 Actions 表有我想要填充的其他列(AgendaID、AgendaDate、AgendaTypeDescription 和 ActionStatusID)。这些附加栏已经在网页上可用,因为它们是用户已经填写的议程表格的一部分。

我不想再次将这些字段添加到我的操作区域并让用户再次添加这些字段,而是希望通过尝试使用已经添加的这些字段(AgendaID、AgendaDate、AgendaTypeDescription 和 ActionStatusID)来节省自己和 Joe Bloggs 的时间。的议程表,并提取它们并以某种方式将它们与其余字段(操作、所有者和目标日期)一起导入,并将这些添加到操作表中。

本质上,数据已经存在,但分布在三个表中。

我一直在尝试在存储过程中在这些表之间建立连接,以便将额外的文件插入到 Actions 表中。

我不太确定如何完成这项工作,并尝试了 Joins 和 UNION ,但没有设法让它工作?

我知道我需要从 WeeklyAgenda 表和 MonthlyAgenda 表中加入 AgendaID、AgendaDate 和 AgendaTypeDescription。

到目前为止,这是我用于操作表存储过程的代码(无需附加字段即可工作)...

 ALTER PROCEDURE [dbo].[Add_Action_Insert]
     @ActionID INT OUTPUT,
@Action VARCHAR(MAX),
     @Owner VARCHAR(50),
     @TargetDate DATETIME
 AS
 INSERT INTO Action (
                    Action,
          Owner,
               TargetDate)                  
    VALUES (
        @Action,
        @Owner,
        @TargetDate)
    SELECT @ActionID = scope_identity()

这就是我想将其更改为...

   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()

这是我现在在数据库中拥有的数据的图像...... 我目前拥有的

这是我想要在我的数据库中的图像... 我想达到什么

我appriechiate我得到的任何信息和帮助。我只是不确定我是否需要从其他两个 tanles 中插入此附加信息或加入?

提前谢谢了。贝蒂

4

1 回答 1

0

我不确定您为什么要将 AgendaDateAgendaTypeDescription列也分配给Action表。这两列应该只保留在议程表中。然后,当从Action表中检索数据时,您将像这样加入Agenda表:

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

如果您决定在Action表中保留AgendaDateAgendaTypeDescription,您至少需要在 Add_Action_Insert_Test 过程中添加一个参数@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() 

在此示例中,我假设WeeklyAgendaMonthlyAgenda中的AgendaID值是分离的。这意味着 WeeklyAgenda 中的任何AgendaID不能出现在MonthlyAgenda 中,反之亦然。例如,您可以通过在一个表中使用偶数 ID 和在另一个表中使用奇数 ID 来实现它(使用列的 IDENTITY 属性的一些高级设置)。

于 2012-05-23T11:42:15.357 回答