我有一个正在运行的SQL查询,它确实插入了正确的数据,但ID不同步:
Dim sql As String = ("INSERT INTO [CANRADcontacts]") & _
(" ([Title], [Initials], [FirstName], [LastName], [Organisation], [Department], [Address], [Code],") & _
(" [Telephone], [WorkTelephone], [Fax], [CellularTelephone],[Email], [ResearchFocus], [CollID], [ResearchFunders])") & _
(" VALUES (@Title, @Initials, @FirstName, @LastName, @Organisation, @Department, @Address, @Code, ") & _
("@Telephone, @WorkTelephone, @Fax, @CellularTelephone, @Email, @ResearchFocus, @CollID, @ResearchFunders); ") & _
("INSERT INTO [CANRADcollreg] ([CollID], [FlightDateArrive], [FlightNameArrive], [FlightTimeArrive], [FlightDateDepart], [FlightNameDepart], [FlightTimeDepart], [AttendingLaunch], [Accomodation], [DietaryRequirements], [SpecificDietaryRequirement]) ") & _
("VALUES (@CollID, @FlightDateArrive, @FlightNameArrive, @FlightTimeArrive, @FlightDateDepart, @FlightNameDepart, @FlightTimeDepart, @AttendingLaunch, @Accomodation, @DietaryRequirements, @SpecificDietaryRequirement)")
在数据库中,我有两列(CANRADcollreg上的ContactsID和CANRADcontacts上的ID),我需要同步并在插入记录时插入相同的ID。请问你能帮我解决这个问题吗?
谢谢和问候。
答案 0 :(得分:2)
在你做两个插入之前,我会得到ContactID的MAX值并加1。然后我将它存储在一个临时字段中,该字段可以在INSERT INTO语句中使用。
您必须在开始时包含这样的内容,或者在运行这些插入之前单独执行此操作。
Dim sql As String = ("DECLARE @ContactID AS INT" ) & _
(" SET @ContactID = ((SELECT MAX(ContactID) FROM CANRADcontacts) + 1) & _
(" INSERT INTO [CANRADcontacts]") & _
(" ([ContactID], [Title], [Initials], [FirstName], [LastName]...
... etc
(" VALUES (@ContactID, @Title, @Initials, @FirstName, @LastName,
然后,您必须在INSERT INTO命令中包含您的ContactID。当然,如果您使用IDENTITY为您的ContactID,那么此方法将无效。
答案 1 :(得分:0)
如果要在另一个查询中使用自动创建的id(auto_increment / identity),通常会有一个函数可以实现。
在SQL Server中,您可以使用函数scope_identity()
来获取在上一个查询中创建的标识。
在Access中,您使用@identity
。在MySQL中,您使用last_insert_id()
。
答案 2 :(得分:0)
CANRADcontacts的ID是否标记为标识符?如果是这样,请查看@@identity
的文档。
这应该为您提供最近创建的ID的值(至少在Transact-SQL中,可能也适用于其他系统)。
为了实现这个目的,你需要在插入CANRADcollreg之前在CANRADcontacts上进行插入。