将数据从一个表复制到另一个表,但Identity列除外

时间:2013-02-25 04:42:13

标签: sql sql-server-2008-r2 identity-column

有没有办法将除Identity列之外的所有列值从一个表复制到另一个表,而没有提及所有其余列名?

我有一个包含63列的表格。我用 -

创建了一个临时表
SELECT * INTO #TmpWide FROM WideTable WHERE 1 = 0  

现在我想将一些数据从WideTable复制到#TmpWide。除了Identity Id列之外,我需要WideTable的所有列,因为我希望复制的数据在#TmpWide中从1开始具有自己的顺序ID。是否可以不提及(63-1)列名?

2 个答案:

答案 0 :(得分:1)

您可以尝试在创建表后删除列:

SELECT * INTO #TmpWide FROM WideTable WHERE 1=0
ALTER TABLE #TmpWide DROP COLUMN [Id]

这确实感觉有点难看或者黑客攻击,但它应该可以解决问题。

答案 1 :(得分:1)

没有办法做到这一点,但在这种情况下使用*也是一个坏主意。如果WideTable发生更改,您将被迫更改SELECT *的存储过程。我写了数百个像这样的存储过程,它所做的只是创造我今天仍在处理的噩梦。祝你好运。