SQL插入查询(语法问题)

时间:2010-02-05 08:17:23

标签: sql-server sql-server-2008 insert

我有一个正在运行的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。请问你能帮我解决这个问题吗?

谢谢和问候。

3 个答案:

答案 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上进行插入。