データベース内の特定のIDに関連付けられたすべてのデータをコピーするストアドプロシージャを作成するタスクが与えられました。このデータは、数十の表にまたがります。各テーブルには、数十の一致する行があります。PK FK関係の後、複数のテーブルから行を再帰的にコピー
例:
テーブルアカウント
PK =アカウントID
表AccountSettings
FK =アカウントID
表ユーザー
PK =ユーザID
FK =アカウントID
表UserContent
PK = UserContentID
FK =ユーザーID
私はコピーが新しいアカウントIDとUserContentIDを持つことになります(ほぼすべてのテーブルを横断します)が、同じユーザーIDを持っていますアカウントIDに関連付けられているすべてのコピーを作成したいです。新しいデータをそれぞれのテーブルに格納する必要があります。 :)楽しいですか?
上記は単なるサンプルですが、私は50または60のテーブルのようなものでこれを行います。 私はCTEを使って研究しましたが、まだ少し曇っています。それが最良の方法であると判明する可能性があります。私のSQLのスキルは......まあ私はこれまでに約40ログした時間を費やして作業しています:)
見た目についてのアドバイスや指示があれば幸いです。さらに、私はC#でこれを行うことに反対することはできません。
ご協力いただきありがとうございます。個別に各テーブルを処理し、非常に長いPROCを書く:
あなたの例では、1つのアカウントは0-nユーザーを持つことができますが、** 1ユーザーは0-1アカウントのみを持つことができます** => 2番目のアカウントに対して同じユーザーIDを持つことはできませんもちろん最初のアカウントへのユーザーの接続を削除したくない) – Aprillion
うわー。私はこのようにはしません。 CTEは100回だけ再発するため、これを超えることができます。なぜ新しい行が追加されなくなるまで、一時テーブル内のテーブルの外部キーに基づいて一時テーブルに追加を続けるのはなぜですか? – saarp
@saarp:なぜCTEは100回だけ繰り返すのですか?それは馬鹿げた前提です。 –