3

嗨我想为自动增量列的值填充从另一个表中插入一个表的值。下面是使用查询IM和它抛出错误sql查询插入到自动增量列的值

create table test12 
(
Id int, 
name varchar(255), 
dept varchar(255) 
) 

insert into test12 values(1,'f','cs'),(2,'b','cse'),(3,'c','cs'),(4,'d','cse'),(5,'e','cs'),(6,'f',null) 

select * from test12                

create table test34 
(
seq int identity(1,1) not null, 
name varchar(255) not null, 
dept varchar(255) default('cs') 
) 
insert into test34(seq,name,dept) values 
(1,(select name from test12), 
(select case when dept='cse' then 'Y' else 'N' end as dept from test12))   

请让我什么是你需要不给身份值错误

+2

,因为他们要检索的多行 –

+0

可能的复制[插入记录到SQL表IDENTITY列(http://stackoverflow.com/questions/16766963/insert-你内心的查询将无法正常工作记录到SQL表,与身份列) – BIDeveloper

回答

3

列,它是自动添加的,只是排除标识列表格插入为:

INSERT INTO test34 (name, dept) 
SELECT 
    name, 
    CASE WHEN dept = 'cse' THEN 'Y' ELSE 'N' END AS dept 
FROM test12 

如果您确实想手动添加标识值,请在SET语句下面尝试。

SET IDENTITY_INSERT test34 ON; 

INSERT INTO test34 (seq, name, dept) 
SELECT 
    ID 
    name, 
    CASE WHEN dept = 'cse' THEN 'Y' ELSE 'N' END AS dept 
FROM test12 

SET IDENTITY_INSERT test34 OFF; 
1

可以打开ONOFFIDENTITY_INSERT

SET IDENTITY_INSERT test34 ON 

insert into test34(seq,name,dept) values 
(1,(select name from test12), 
(select case when dept='cse' then 'Y' else 'N' end as dept from test12)) 

SET IDENTITY_INSERT test34 OFF 
-1

无需为自动增量列自动插入值,它会生成值。

insert into test34(name,dept) 
select name, Case when dept='cse' then 'Y' else 'N' end as dept from test12