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 不提供任何类型的“选择 * 除了身份”功能,您必须通过指定每一列自己编写。如果表的列定义会随着时间而改变(添加、重命名或删除列),那么唯一的方法是使用动态代码,根据 sys.columns 的内容构建插入语句 for object_kd = object_id('YourTable '),不包括标识列(如果存在)。为了我的钱,如果您添加列,您最好查看和更新​​引用该表的代码。

哦,如果 ID 是主键,那top 1就没必要了。

于 2011-04-27T16:23:51.747 回答
1

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

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

您的另一个选项是动态 SQL,从 构建列列表information_schema.columns,跳过具有标识的列,然后执行动态 sql

于 2011-04-27T16:19:10.007 回答