【问题标题】:sql query to insert values to auto increament columnsql查询将值插入到自动递增列
【发布时间】:2016-11-22 10:56:43
【问题描述】:

您好,我想在从另一个表中插入表的值时填充自动增量列的值。下面是我正在使用的查询,它会引发错误

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))          

请告诉我是什么错误

【问题讨论】:

标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2008-r2


【解决方案1】:

您不需要为标识列提供值,它是自动添加的,只需排除标识列表单插入为:

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;

【讨论】:

    【解决方案2】:

    自动递增列不需要插入值,它会自动生成值。

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

    【讨论】:

      【解决方案3】:

      您可以将ONOFF 转至IDENTITY_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
      

      【讨论】:

        猜你喜欢
        • 2013-04-12
        • 2012-02-02
        • 1970-01-01
        • 1970-01-01
        • 2013-04-13
        • 1970-01-01
        • 2020-01-23
        • 2020-06-18
        • 1970-01-01
        相关资源
        最近更新 更多