SELECT *(除了Identity)FROM

时间:2011-04-27 16:16:12

标签: sql-server-2005 duplicate-data

我有一个包含大约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

这可能吗?

2 个答案:

答案 0 :(得分:3)

SQL Server不提供任何类型的“select * except for identity”功能,您必须通过指定每一列来自己编写。如果表的列定义会随着时间的推移而改变(添加,重命名或删除列),那么唯一的方法是使用动态代码,根据object_kd = object_id('YourTable)的sys.columns内容构建insert语句'),如果存在标识列,则排除标识列。对于我的钱,如果添加列,最好查看并更新引用该表的代码。

哦,如果ID是主键,则不需要top 1

答案 1 :(得分:1)

一种方法,但会抓住所有列

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

你的另一个选择是动态SQL,从information_schema.columns构建列列表,跳过带有identity的列表,然后执行动态sql