0

私はこのようなことをしたい:

INSERT INTO T SELECT * FROM T WHERE Column1 = 'MagicValue' -- (multiple rows may be affected)

問題は、T に主キー列があるため、主キーを設定しようとしているかのようにエラーが発生することです。率直に言って、主キーも設定したくありません。新しい主キーを使用してまったく新しい行を作成したいのですが、残りのフィールドは元の行からコピーされます。

これは、さまざまなテーブルに適用可能な汎用コードであると想定されています。これを行う良い方法がない場合は、列名を動的に抽出したり、リストを作成したりするコードを記述します。データベースなどで重複する行を作成しようとしたのは私が初めてでしょうか?

4

2 に答える 2

0

データベース内の行を複製しても何も得られません(主キーを設定しようとしなかったことを考慮して)。「amount」などと呼ばれる別の列がある方が賢明で問題を回避できます。

何かのようなもの

UPDATE T SET Amount = Amount + 1 WHERE Column1 = 'MagicValue'

または、返されるフィールドの量と同じように1つ以上増加する可能性がある場合

Update T SET Amount = Amount * 2 WHERE Column1 = 'MagicValue'

あなたが何をしようとしているのか正確にはわかりませんが、上記があなたがしていることに対してうまくいかない場合、あなたのデザインには新しいテーブルが必要であり、そこに挿入すると思います。

編集:また、あなたのコメントの下で述べられているように、一般的な挿入は実際には意味がありません。これが機能するためには、同じ数のフィールドが必要であり、それらは同じ値を保持し、同じ名前を持つ必要があることを示唆していると想像してください(必要がない場合でも)。基本的には同じテーブル構造になります。

于 2011-05-04T21:08:15.790 に答える
0

「主キー」とは、自動割り当てまたは自動インクリメントのデータ型を意味すると想定してidentityguidます。

非常に洗練された動的 SQL がなければ、やりたいことができません。ID フィールド以外のすべてを挿入する場合は、フィールドを指定する必要があります。

そのフィールドの値を指定する場合は、すべてのフィールドを と で指定SELECTし、INSERT ANDをオンにする必要がありますIDENTITY_INSERT

于 2011-05-04T20:56:28.393 に答える