私の答えがパーティーに遅れるのはわかっています。しかし、私が解決した方法はすべての答えとは少し異なります。
いくつかの列を除いて、テーブルの行を複製する必要がありました。それらのいくつかは新しい価値を持つでしょう。このプロセスは、テーブルへの将来の変更を自動的にサポートする必要があります。つまり、列名を指定せずにレコードを複製します。
私のアプローチは、
- Sys.Columnsをクエリして、テーブルの列の完全なリストを取得し、スキップする列の名前をwhere句に含めます。
- それを列名としてCSVに変換します。
- ビルド選択...これに基づいてスクリプトに挿入します。
declare @columnsToCopyValues varchar(max), @query varchar(max)
SET @columnsToCopyValues = ''
--Get all the columns execpt Identity columns and Other columns to be excluded. Say IndentityColumn, Column1, Column2
Select @columnsToCopyValues = @columnsToCopyValues + [name] + ', ' from sys.columns c where c.object_id = OBJECT_ID('YourTableName') and name not in ('IndentityColumn','Column1','Column2')
Select @columnsToCopyValues = SUBSTRING(@columnsToCopyValues, 0, LEN(@columnsToCopyValues))
print @columnsToCopyValues
Select @query = CONCAT('insert into YourTableName (',@columnsToCopyValues,', Column1, Column2) select ', @columnsToCopyValues, ',''Value1'',''Value2'',', ' from YourTableName where IndentityColumn =''' , @searchVariable,'''')
print @query
exec (@query)