2010-02-05 115 views
0

我這是工作的一個SQL查詢,它插入正確的數據,但該ID的不同步:SQL插入查詢(語法問題)

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)") 

在數據庫中,我有兩列(ContactsID在CANRADcollreg和CANRADcontacts上的ID),我需要同步並插入記錄時插入相同的ID。請你能幫助我如何實現這一目標?

感謝和問候。

+1

您使用的數據庫是? – 2010-02-05 08:23:16

+0

MS SQL Server 2008 – Phil 2010-02-05 10:26:15

回答

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, 

然後,您將不得不將您的ContactID包含在INSERT INTO命令中。當然,如果你爲你使用一個IDENTITY ContactID,那麼這個方法將無法工作。

0

如果您想在另一個查詢中使用自動創建的id(auto_increment/identity)來查詢一個查詢,通常有一個函數可以獲取該id。

在SQL Server中,例如,使用函數scope_identity()來獲取在上一個查詢中創建的標識。

在Access中,您使用@identity。在MySQL中,您使用last_insert_id()

0

CANRADcontacts的ID是否標記爲標識符?如果是這樣,請查看@@identity的文檔。

這應該爲您提供最近創建的ID(至少在Transact-SQL中,也可能用於其他系統)的值。

爲此,您需要在插入CANRADcollreg之前對CANRADcontacts執行插入操作。