我在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, 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.
答案 0 :(得分:1)
如果companies.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
如果companies.id
不是identity()
或sequence
且默认为next value for
,则可以row_number()
添加max()
id
来自companies
的{1}}:
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
答案 1 :(得分:1)
您无法手动将值插入identity column
。这是由系统生成的代理键。只有当您set identity insert
为ON时,您才能插入值,但仍然不是整个identity
。
创建时,您需要将该列id
默认为identity
。如果该列现在不是标识,则需要重新创建添加了该默认值的表。
更新,因为您已将该列作为identity
列,只需跳过插入该列,插入其余字段,即会自动填充id
。< / p>