0

皆さんおはよう、

2つのWebフォーム(WeeklyAgendaとMonthlyAgenda)があり、両方ともデータベース内の個別のテーブルである議事録を保持しています。これらのWebページを使用すると、ユーザーはデータベース内のアクションテーブルにアクションを追加することもできます。

会議の議事録とアクションの両方に、データを更新するときに個別のボタンが割り当てられています。[アクション]領域では、ユーザーは3つのフィールド(アクション、所有者、およびターゲット日付)のみを追加できます。

アクションテーブルには、入力したい追加の列(AgendaID、AgendaDate、AgendaTypeDescription、およびActionStatusID)があります。これらの追加の列は、ユーザーがすでに入力したアジェンダフォームの一部であるため、Webページですでに利用可能です。

これらのフィールドをアクションエリアに再度追加してユーザーに再度追加させる代わりに、すでに2つ追加されているこれらのフィールド(AgendaID、AgendaDate、AgendaTypeDescription、およびActionStatusID)を取得して、自分自身とJoeBloggsの時間を節約したいと思います。アジェンダテーブルを抽出し、残りのフィールド(Action、Owner、Targetdate)を使用して何らかの方法でインポートし、アクションテーブルに追加します。

基本的に、データはすでに存在しますが、3つのテーブルに分散しています。

ストアドプロシージャでこれらのテーブルを結合して、追加のファイルが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()

これは私が現在データベースに持っているデータの画像です... 私が現在持っているもの

これは私のデータベースに欲しいものの画像です... 達成したいこと

私はどんな情報でも理解し、私が得るのを手伝います。他の2つのタンレからこの追加情報を挿入する必要があるのか​​、それとも参加する必要があるのか​​わからないのですが?

よろしくお願いします。ベティ

4

1 に答える 1

0

AgendaDate 列とAgendaTypeDescription列をActionテーブルにも配布している理由がわかりませんこれらの 2 つの列は、議題テーブルのみに残す必要があります。次に、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をキークする場合は、少なくともパラメータ@AgendaIDを Add_Action_Insert_Test プロシージャに追加して、アクションが属するアジェンダを識別する必要があります。

次に、手順は次のようになります。

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 のが論理和であると想定しています。これは、WeeklyAgendaAgendaIDがMonthlyAgenda内で発生することはできず、その逆もありえないことを意味します。たとえば、あるテーブルで偶数の ID を使用し、別のテーブルで奇数の ID を使用することで、これを実現できます (列の IDENTITY プロパティの高度な設定を使用)。

于 2012-05-23T11:42:15.357 に答える