Sql 从添加标识的临时表插入
我已经使用SQL Server上的大容量插入从csv文件中导入了几行到临时表中。我必须在临时表上导入,因为CSV文件中不存在主键ID 现在我想把数据转移到真实的表格上;但是我不能,因为我找不到添加id的方法 我试过:Sql 从添加标识的临时表插入,sql,sql-server,tsql,identity,bulkinsert,Sql,Sql Server,Tsql,Identity,Bulkinsert,我已经使用SQL Server上的大容量插入从csv文件中导入了几行到临时表中。我必须在临时表上导入,因为CSV文件中不存在主键ID 现在我想把数据转移到真实的表格上;但是我不能,因为我找不到添加id的方法 我试过: INSERT INTO companies (id, code, name, vat_code, ce_vat_code, fiscal_code, address, zip_code) SELECT IDENTITY(INT) AS id, code, name, va
INSERT INTO companies (id, code, name, vat_code, ce_vat_code, fiscal_code,
address, zip_code)
SELECT IDENTITY(INT) AS id, code, name, vat_code, ce_vat_code,
fiscal_code, address, zip_code
FROM temp_companies
但我得到了这个错误:
The IDENTITY function can only be used when the SELECT statement has an INTO
clause.
如果
companys.id
是identity()
列,则无需为该列插入值:
INSERT INTO companies (code, name, vat_code, ce_vat_code, fiscal_code, address, zip_code)
SELECT code, name, vat_code, ce_vat_code, fiscal_code, address, zip_code
FROM temp_companies
如果
companys.id
不是identity()
或sequence
的下一个默认值,则可以从companys
向max()
id
添加行编号()
:
INSERT INTO companies (id, code, name, vat_code, ce_vat_code, fiscal_code, address, zip_code)
SELECT m.maxid + row_number() over (order by (select 1))
, code, name, vat_code, ce_vat_code, fiscal_code, address, zip_code
FROM temp_companies
cross join (select max(id) as maxid from companies) m
如果
companys.id
是identity()
列,则无需为该列插入值:
INSERT INTO companies (code, name, vat_code, ce_vat_code, fiscal_code, address, zip_code)
SELECT code, name, vat_code, ce_vat_code, fiscal_code, address, zip_code
FROM temp_companies
如果
companys.id
不是identity()
或sequence
的下一个默认值,则可以从companys
向max()
id
添加行编号()
:
INSERT INTO companies (id, code, name, vat_code, ce_vat_code, fiscal_code, address, zip_code)
SELECT m.maxid + row_number() over (order by (select 1))
, code, name, vat_code, ce_vat_code, fiscal_code, address, zip_code
FROM temp_companies
cross join (select max(id) as maxid from companies) m
您不能手动将该值插入
标识列
。这是系统生成的代理密钥。只有当将identity insert
设置为ON时,才能插入值,但仍然不能插入整个identity
创建该列时,需要将该列id
默认为identity
。如果该列现在不是identity,则需要重新创建添加了默认值的表
更新因为您已经将该列作为
identity
列,只需跳过插入该列,插入其余字段,id
将自动填充。您不能手动将值插入identity列
。这是系统生成的代理密钥。只有当将identity insert
设置为ON时,才能插入值,但仍然不能插入整个identity
创建该列时,需要将该列id
默认为identity
。如果该列现在不是identity,则需要重新创建添加了默认值的表
更新因为您已经将该列作为
identity
列,只需跳过插入该列,插入其余字段,id
将自动填充。是companys.id
已经是identity()
列吗?是的,在create语句中:id BIGINT identity(1,1)NOT NULL,然后不应该选择它,将自动填写IScompanys.id
已经是identity()
列了吗?是的,在create语句中:id BIGINT identity(1,1)NOT NULL,然后不应该选择它,将自动填写。如果为该表设置identity\u insert,则可以插入标识值。而且它不是代理密钥。如果列允许重复,则没有任何内容表明标识必须是唯一的。当然,大多数情况下,我们都将此集合视为主键。thx@SeanLange,对于第一部分,我执行了Metaiond xD,感谢您更正我的错误。后面的部分实际上,如果为该表设置identity_insert,您可以插入标识值。而且它不是代理密钥。如果列允许重复,则没有任何内容表明标识必须是唯一的。当然,大多数情况下,我们都将此集合视为主键。thx@SeanLange,对于第一部分,我执行了metaioned xD,感谢您纠正我的错误。稍后,我尝试了第二个选项(我错了,companys表的id未设置为identity())。但是我得到了以下错误:列名“id”无效。
@阿根廷在行编号()中更新为order by(选择1)
,
我尝试了第二个选项,(我错了,COMPANYS表没有将id设置为identity()。但是我得到了以下错误:列名“id”无效。
@阿根廷更新到(选择1)
行中的编号()