Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何插入到包含非标识字段主键的表中_Sql_Sql Server - Fatal编程技术网

Sql 如何插入到包含非标识字段主键的表中

Sql 如何插入到包含非标识字段主键的表中,sql,sql-server,Sql,Sql Server,我试图插入到商业数据库中的一个表中,在该表中我无法更改模式。插入程序正在尝试加载数百条记录。我插入的表包含一个主键字段,该字段不是标识字段。在保持主键字段完整性的同时,完成这些插入的最佳方法是什么 INSERT INTO ADVANCED.BIF006 ( C_CUSTOMER, C_ACCOUNT, C_ADDTYPE, I_BIF006PK) VALUES ( '', -- C_CUSTOMER - char(15) '', -- C_ACCOUNT - char(15) '',

我试图插入到商业数据库中的一个表中,在该表中我无法更改模式。插入程序正在尝试加载数百条记录。我插入的表包含一个主键字段,该字段不是标识字段。在保持主键字段完整性的同时,完成这些插入的最佳方法是什么

INSERT INTO ADVANCED.BIF006 ( C_CUSTOMER, C_ACCOUNT, C_ADDTYPE, I_BIF006PK)
VALUES (
  '', -- C_CUSTOMER - char(15)
  '', -- C_ACCOUNT - char(15)
  '', -- C_ADDTYPE - char(2)
  ???, -- I_BIF006PK - decimal(15, 0)
)

这是一个猜测,因为我没有所有的细节。我希望有帮助

假设数据加载之前的当前现有表有一个最大值为
1000
的PK。然后,新行可以从
1001
开始。要做到这一点,可以使用序列。例如:

create sequence load_seq1 start with 1001

INSERT INTO ADVANCED.BIF006 ( C_CUSTOMER, C_ACCOUNT, C_ADDTYPE, I_BIF006PK)
VALUES (
  '', -- C_CUSTOMER - char(15)
  '', -- C_ACCOUNT - char(15)
  '', -- C_ADDTYPE - char(2)
  next value for load_seq1, -- I_BIF006PK - decimal(15, 0)
)

drop sequence load_seq1

只需插入所有行,包括PK值。我觉得有些事你没说。什么是数据库引擎?
INSERT
语句的外观如何?表中是否已有数据?您是否有重复的密钥?您不必维护PK字段的完整性,数据库会为您这样做,问题是您是否已经有PK值,还是需要生成PK值?SQL Server表中确实有数据。应用程序增加字段本身,而不是通过标识字段自动增加。下面是通用的Insert语句。我想做的是找出如何在为I_BIF006PK插入正确值的同时进行批量插入。基本上,我需要检查表中该字段的最大值,并为每个记录添加一个。INSERT INTO ADVANCED.BIF006(C_CUSTOMER,C_ACCOUNT,C_ADDTYPE,I_BIF006PK值(“”,--C_CUSTOMER-char(15)”,--C_ACCOUNT-char(15)”,--C_ADDTYPE-char(2)???,--I_BIF006PK-十进制(15,0))你不能只使用
序列
为PK提供新值吗?将其起始值设置为最大现有值+1。我以前不熟悉使用序列。我很快查找到了这一点,它似乎正是我要查找的。非常感谢!!!!