2011-04-27 83 views
2

我有一个约20列的表格,我希望复制一条记录。我可能只是这样做:SELECT *(除了身份)FROM

INSERT INTO [Table] (ColumnA, ColumnB, ColumnC, .... ColumnZ) 
SELECT TOP 1 ColumnA, ColumnB, ColumnC, .... ColumnZ 
FROM [Table] 
WHERE [email protected] 

然而,这将是耗时的,如果将新列添加到表在未来,我想这是自动复制。所以我在寻找这样做的一些方法:

INSERT INTO [Table] 
SELECT TOP 1 * (apart from identity) 
FROM [Table] 
WHERE [email protected] 

这可能吗?

回答

3

SQL Server会不提供任何种类的“select *除身份”功能,您必须通过指定每一列来自己写。如果表的列定义随时间变化(添加,重命名或删除列),那么唯一的方法是使用动态代码,根据sys.columns的内容构建插入语句object_kd = object_id('YourTable '),不包括身份列,如果有的话。对于我的钱,如果添加列,最好审查并更新引用该表的代码。

哦,如果ID是主键,那么top 1是不必要的。

1

的一种方式,但将抓住所有列

SELECT TOP 1 * 
INTO [NewTable] 
FROM [Table] 
WHERE [email protected] 

你其他的选项是动态的SQL,从information_schema.columns构建列列表,跳过一个有身份,然后执行动态SQL

相关问题