1

私のDataTableのデータは次のようなものです

ID ContactName1  Designation1 ContactName2 Designation2
1  A             dummy        B            sam 

私のテーブルのテーブル構造は

ID ContactName Designation

ストアド プロシージャで次のように値を渡しています。

@ContactName1
@Designation1

@ContactName2
@Designation2

レコードを挿入する単一の挿入ステートメントが必要です。

どうすればこれを達成できますか?

4

3 に答える 3

2

ID プライマリ キーが自動インクリメントに設定され、テーブルに 3 つのフィールドがあると仮定します。

INSERT INTO DataTable (ContactName, Designation) VALUES 
    (@ContactName1, @Designation1), 
    (@ContactName2, @Designation2);

実際の ID によると、Ivan の応答に関するコメントから判断すると、自動インクリメントを使用していない場合は、実際には MAX() ステートメントを使用して取得できます。

SELECT MAX(ID) AS max_id FROM DataTable
于 2009-01-14T07:41:52.960 に答える
1

ストアド プロシージャ内にあるのに、INSERT ステートメントが 1 つなのか 2 つなのかを気にする必要はありません。明らかに、2 つのステートメントは自明です。

一部の DBMS では、単一の INSERT で複数の値句をリストできます (@Ivan はこれを提案しています)。

INSERT INTO Table(ID, ContactName, Designation)
    VALUES(1, @ContactName1, @Designation1)
    VALUES(1, @ContactName2, @Designation2);

値リストの間にコンマが必要かどうかはわかりません。また、テーブル内の 2 つのレコードが同じ ID を持つことが許可されているかどうか、また ID がどのように決定されるかについても明確ではありません。

DBMS が 1 つの INSERT ステートメントで複数の VALUES 句をサポートしていない場合は、2 つの INSERT ステートメントを受け入れるのが最善です。原子性が問題になる場合は、トランザクションを検討できますが、これがより大きなトランザクションの一部にすぎない場合は、特にエラー時の ROLLBACK が問題になります。DBMS が SAVEPOINTS をサポートしている場合、プロシージャーは開始時にセーブポイントを確立し、終了時にそのセーブポイントにコミットまたはロールバックすることができます。

于 2009-01-14T07:41:53.740 に答える
0

テーブル名の値に挿入(カンマで区切られた番号と順序に従って値を指定)

元:-

INSERT INTO TABLENAME VALUES(1,'INDIA')

ここに2つの列SNと国があります

于 2009-01-17T06:53:36.063 に答える