在MS-SQL中,如何在不首先声明临时表的情况下插入临时表并创建IDENTITY字段?

Dal*_*e B 40 sql sql-server

我需要在临时表中选择一堆数据然后进行一些二次计算; 为了使其更有效地工作,我希望在该表上有一个IDENTITY列.我知道我可以先用一个标识声明表,然后将其余的数据插入其中,但是有没有办法在一步中完成它?

Mat*_*ish 76

哦,你们有点信仰:

SELECT *, IDENTITY( int ) AS idcol
  INTO #newtable
  FROM oldtable
Run Code Online (Sandbox Code Playgroud)

http://msdn.microsoft.com/en-us/library/aa933208(SQL.80).aspx


boe*_*oes 5

您评论说:如果oldtable具有标识列,则无法正常工作.

我想那是你的答案.#newtable自动从oldtable获取标识列.运行下一个语句:

create table oldtable (id int not null identity(1,1), v varchar(10) )

select * into #newtable from oldtable

use tempdb
GO
sp_help #newtable
Run Code Online (Sandbox Code Playgroud)

它向您显示#newtable确实具有标识列.

如果您不想要标识列,请在创建#newtable时尝试:

select id + 1 - 1 as nid, v, IDENTITY( int ) as id into #newtable
     from oldtable
Run Code Online (Sandbox Code Playgroud)