1

私はSQLにこのようなテーブルをいくつか持っています

A            B           C
ID_A         ID_B        ID_C
Name         Name        Name
             ID_A        ID_B

ご覧のとおり、AはBにリンクされ、BはCにリンクされています。これらは基本的にデータモデルを含むテーブルです。今、私はそれらのテーブルに基づいて日付を作成できる必要があります。たとえば、次のデータがある場合

A                    B                        C
1    Name1           1  SubName1   1          1  SubSubName1  1
2    Name2           2  SubName2   1          2  SubSubName2  1
                     3  SubName3   2          3  SubSubName3  2
                                              4  SubSubName4  3
                                              5  SubSubName5  3

それらのテーブルの「コンテンツ」を他のテーブルにコピーしたいと思います。もちろん、新しいテーブルに挿入するときに生成される自動テンキーは、それらのテーブルとは異なり、すべてをコピーできるように追跡できるようにしたいと思います。受信者テーブルの構造には、それらよりも多くの情報が含まれていますが、主に日付やその他の情報を簡単に取得できます。

これは完全にTRANSACT-SQLで行う必要があります(必要に応じて組み込み関数を使用)。これは可能ですか?誰でも簡単な例を教えてください。私はなんとか1つのレベルでそれを行うことができますが、残りのレベルでは混乱します。

ありがとう

編集:私の実際の図はこのように見えるので、上記の情報は単なる例です

モデルテーブル:

Processes -- (1-N) Steps -- (1-N) Task             -- (0-N) TaskCheckList
                         -- (0-N) StepsCheckLists

私が記入する必要があるテーブルは次のようになりますが

Client -- (0-N) Sequence -- (1-N) ClientProcesses -- (1-N) ClientSteps -- (1-N)ClientTasks -- (0-N) ClientTaskCheckList
                                                                       -- (0-N)ClientStepCheckLists

クライアントはすでに存在し、スクリプトを実行する必要がある場合は、1つのシーケンスを作成します。このシーケンスには、すべてのプロセスが含まれ、そのステップ、タックなどが含まれます。

4

1 に答える 1

0

Ok、

そこで、試行錯誤を繰り返した結果、ここにたどり着きました。最初は簡単に思えたものの、かなり大きく聞こえますが、うまく機能しているようです。

私たちのクライアントはフランス人であり、私たちもフランス人であるため、これは全体的にフランス語と英語です。必要なすべてのテーブルにすべての日付を挿入します。これに残っているのは、いくつかのパラメーターに従って挿入する日付を選択する必要がある最初の行だけですが、これは簡単な部分です。

DECLARE @IdProcessusRenouvellement bigint
DECLARE @NomProcessus nvarchar(255)

SELECT @IdProcessusRenouvellement = ID FROM T_Ref_Processus WHERE Nom LIKE 'EXP%'
SELECT @NomProcessus = Nom FROM T_Ref_Processus WHERE Nom LIKE 'EXP%'

DECLARE @InsertedSequence table(ID bigint)

DECLARE @Contrats table(ID bigint,IdClient bigint,NumeroContrat nvarchar(255))

INSERT INTO @Contrats SELECT ID,IdClient,NumeroContrat FROM T_ClientContrat

DECLARE @InsertedIdsSeq as Table(ID bigint)

-- Séquences de travail
INSERT INTO T_ClientContratSequenceTravail(IdClientContrat,Nom,DateDebut)
    OUTPUT Inserted.ID INTO @InsertedIdsSeq
    SELECT ID, @NomProcessus + ' - ' + CONVERT(VARCHAR(10), GETDATE(), 120) + ' : ' +     NumeroContrat ,GETDATE() 
    FROM @Contrats

-- Processus
DECLARE @InsertedIdsPro as Table(ID bigint,IdProcessus bigint)
INSERT INTO T_ClientContratProcessus
        (IdClientContratSequenceTravail,IdProcessus,Nom,DateDebut,DelaiRappel,DateRappel,LienAvecPro    cessusRenouvellement,IdStatutProcessus,IdResponsable,Sequence)
    OUTPUT Inserted.ID,Inserted.IdProcessus INTO @InsertedIdsPro
    SELECT     I.ID,P.ID,P.Nom,GETDATE(),P.DelaiRappel,GETDATE(),P.LienAvecProcessusRenouvellement,0,0,0
        FROM @InsertedIdsSeq I, T_Ref_Processus P 
        WHERE P.ID = @IdProcessusRenouvellement

-- Étapes
DECLARE @InsertedIdsEt as table(ID bigint,IdProcessusEtape bigint)
INSERT INTO T_ClientContratProcessusEtape 
        (IdClientContratProcessus,IdProcessusEtape,Nom,DateDebut,DelaiRappel,DateRappel,NomListeVeri    fication,Sequence,IdStatutEtape,IdResponsable,IdTypeResponsable,ListeVerificationTermine)
    OUTPUT Inserted.ID,Inserted.IdProcessusEtape INTO @InsertedIdsEt
SELECT I.ID,E.ID,
            E.Nom,GETDATE(),E.DelaiRappel,GETDATE(),COALESCE(L.Nom,''),E.Sequence,0,0,E.IdTypeResponsabl    e,0
FROM @InsertedIdsPro I INNER JOIN  T_Ref_ProcessusEtape E ON I.IdProcessus =     E.IdProcessus
LEFT JOIN T_Ref_ListeVerification L ON E.IdListeVerification = L.ID

-- Étapes : Items de la liste de vérification   
INSERT INTO T_ClientContratProcessusEtapeListeVerificationItem
    (IdClientContratProcessusEtape,Nom,Requis,Verifie)  
    SELECT I.ID,IT.Nom,IT.Requis,0
    FROM @InsertedIdsEt I 
    INNER JOIN T_Ref_ProcessusEtape E ON I.IdProcessusEtape = E.ID
    INNER JOIN T_Ref_ListeVerificationItem IT ON E.IdListeVerification =     IT.IdListeVerification

-- Tâches
DECLARE @InsertedIdsTa as table(ID bigint, IdProcessusEtapeTache bigint)
INSERT INTO T_ClientContratProcessusEtapeTache
        (IdClientContratProcessusEtape,IdProcessusEtapeTache,Nom,DateDebut,DelaiRappel,DateRappel,No    mListeVerification,Sequence,IdStatutTache,IdResponsable,IdTypeResponsable,ListeVerificationT    ermine)
    OUTPUT Inserted.ID,Inserted.IdProcessusEtapeTache INTO @InsertedIdsTa
    SELECT I.ID,T.ID,
               T.Nom,GETDATE(),T.DelaiRappel,GETDATE(),COALESCE(L.Nom,''),T.Sequence,0,0,T.IdTypeResponsabl    e,0
    FROM @InsertedIdsEt I 
    INNER JOIN T_Ref_ProcessusEtapeTache T ON I.IdProcessusEtape = T.IdProcessusEtape
    LEFT JOIN T_Ref_ListeVerification L ON T.IdListeVerification = L.ID


-- Tâches : Items de la liste de vérification
INSERT INTO T_ClientContratProcessusEtapeTacheListeVerificationItem
    (IdClientContratProcessusEtapeTache,Nom,Requis,Verifie) 
    SELECT I.ID,IT.Nom,IT.Requis,0
    FROM @InsertedIdsTa I 
    INNER JOIN T_Ref_ProcessusEtapeTache T ON I.IdProcessusEtapeTache = T.ID
    INNER JOIN T_Ref_ListeVerificationItem IT ON T.IdListeVerification =     IT.IdListeVerification
于 2012-04-25T20:37:00.610 に答える