小编典典

具有唯一索引的SQL克隆记录

sql

有没有一种干净的方法来克隆SQL中具有索引(自动增量)的记录。我想克隆除索引外的所有字段。我目前必须枚举每个字段,并在插入选择中使用它,而我宁愿不明确列出所有字段,因为它们可能随时间而变化。


阅读 175

收藏
2021-04-28

共1个答案

小编典典

除非您想进入动态SQL,否则不可以。既然您写的是“干净”,我就不做。

编辑:
由于他要求一个动态的SQL示例,我将对此进行介绍。我目前尚未连接到任何数据库,因此这是我的首要任务,几乎可以肯定需要修订。但希望它能抓住事物的精神:

-- Get list of columns in table
SELECT INTO #t
EXEC sp_columns @table_name = N'TargetTable'

-- Create a comma-delimited string excluding the identity column
DECLARE @cols varchar(MAX)
SELECT @cols = COALESCE(@cols+',' ,'') + COLUMN_NAME FROM #t WHERE COLUMN_NAME <> 'id'

-- Construct dynamic SQL statement
DECLARE @sql varchar(MAX)
SET @sql = 'INSERT INTO TargetTable (' + @cols + ') ' +
    'SELECT ' + @cols + ' FROM TargetTable WHERE SomeCondition'

PRINT @sql -- for debugging
EXEC(@sql)
2021-04-28