0

次のことを行うには、ストアドプロシージャを作成する必要があります。

    SELECT * FROM TABLE1

次に、返された行ごとに;

    INSERT INTO TABLE2 (column1, column2, column3,...) 
    VALUES (value1, value2, value3,...)

どうすればこれを行うことができますか?

更新**

したがって、これまでの応答に基づいて、次のSQLを取得しました。

INSERT INTO recEntrantStatus (entrantId, roundId, judgeId)
SELECT entrantId, judgeId
FROM recEntrantStatus
WHERE roundId = 0
AND voted = true
AND enterNextround = true

ただし、roundId列に新しく作成されたレコードに入力@roundなどの固定値を追加する必要があります。

どうすればそれを行うことができますか?

ありがとう。

-------------------------------------アップデート2----------- --------------------------------

皆さんからの多大な支援のおかげで、この段階でうまく機能する次のSQLを入手できました。

  INSERT INTO recEntrantStatus (entrantId, roundId, judgeId, notified, voted, enterNextRound)
  SELECT entrantId, (@round + 1), judgeId, 0, 0, 0
  FROM recEntrantStatus
  WHERE roundId = @round
  AND voted = 1
  AND enterNextround = 1

このコードは、「enterNextRound」がtrueであるすべてのレコードをチェックしてから、それらのそれぞれに新しいレコードを作成します。

ただし、次のようにこれを拡張する必要があります。

A)すべてのジャッジの2番目のテーブル(tblJudges)を確認し、すべてのジャッジID(Id)の配列を取得します。

B)ステップAで取得したジャッジ/ジャッジIDごとに、上記の各レコードを作成することを除いて、上記の例と同じようにします。

どんな助け/提案もいつものように大いに感謝されるでしょう。

ありがとう!

クローズ-追加の要件により、新しい質問として投稿された質問。ありがとう!

4

2 に答える 2

3
CREATE PROCEDURE myProcedure
AS
    INSERT INTO table2 (col1, col2, col3)
    SELECT      col1, col2, col3
    FROM        table1
GO

または、同様のものが機能するはずです。SQL Server では、ステートメントINSERTから直接実行できます。SELECT

ストアド プロシージャである必要はないことに注意してください (すべての実装で静的にしたいビジネス ロジックまたは条件)。


アップデート

CREATE PROCEDURE myprocedure @roundId DECIMAL(5,2)
AS
  INSERT INTO   recEntrantStatus
               (entrantId, roundId, judgeId)
  SELECT        entrantId, roundId, judgeId
  FROM          recEntrantStatus
  WHERE         roundId = @roundId
    AND         voted = 1
    AND         enterNextRound = 1
GO 
于 2012-10-09T16:02:13.037 に答える
1

INSERT には 2 つの構文が許可されています。上記は1つですが、次のこともできます。

INSERT INTO
    Table1(col1, col2, col3)
SELECT
    Col1,
    Col2,
    Col3
FROM
    Table2
于 2012-10-09T16:01:57.567 に答える