我知道我的回答迟到了。但是我解决的方法与所有答案略有不同。
我有一种情况,除了几列外,我需要在表中克隆一行。那几个将具有新的价值。此过程应自动支持将来对表进行更改。这意味着克隆记录而不指定任何列名。
我的方法是
- 查询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)