2

約20列のテーブルがあり、レコードを複製したいと思います。私はただすることができました:

INSERT INTO [Table] (ColumnA, ColumnB, ColumnC, .... ColumnZ)
SELECT TOP 1 ColumnA, ColumnB, ColumnC, .... ColumnZ
FROM [Table]
WHERE ID=@ID

ただし、これには時間がかかります。将来、新しい列がテーブルに追加された場合は、これを自動的に複製する必要があります。したがって、私はいくつかの方法を探しています:

INSERT INTO [Table]
SELECT TOP 1 * (apart from identity)
FROM [Table]
WHERE ID=@ID

これは可能ですか?

4

2 に答える 2

3

SQL Serverは、「IDを除く*」機能を提供していません。各列を指定して、自分で作成する必要があります。テーブルの列定義が時間の経過とともに変化する場合(列の追加、名前変更、または削除)、それを行う唯一の方法は、動的コードを使用して、object_kd = object_id('YourTableのsys.columnsの内容に基づいて挿入ステートメントを作成することです。 ')、ID列が存在する場合は除外します。私のお金では、列を追加する場合は、そのテーブルを参照するコードを確認して更新することをお勧めします。

ああ、IDが主キーの場合top 1は不要です。

于 2011-04-27T16:23:51.747 に答える
1

一方向ですが、すべての列を取得します

SELECT TOP 1 * 
INTO [NewTable]
FROM [Table]
WHERE ID=@ID

他のオプションは動的SQLであり、から列リストを作成し、information_schema.columnsIDを持つものをスキップして、動的SQLを実行します。

于 2011-04-27T16:19:10.007 に答える