SQL Insert Query (вопрос синтаксиса) - PullRequest
0 голосов
/ 05 февраля 2010

У меня есть 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 и ID на CANRADcontacts), которые мне нужно синхронизировать и вставлять один и тот же идентификатор при вставке записи. Пожалуйста, не могли бы вы помочь мне в этом?

Спасибо и всего наилучшего.

Ответы [ 3 ]

2 голосов
/ 05 февраля 2010

Перед тем, как вы сделаете ваши две вставки, я получу максимальное значение ContactID и добавлю 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 голосов
/ 05 февраля 2010

Помечен ли идентификатор CANRADcontacts как идентификатор? Если это так, взгляните на документацию для @@identity.

Это должно дать вам значение последнего созданного идентификатора (по крайней мере, в Transact-SQL, возможно, также для других систем).

Чтобы это работало, вам необходимо выполнить вставку в CANRADcontact перед вставкой в ​​CANRADcollreg.

0 голосов
/ 05 февраля 2010

Если вы хотите использовать автоматически созданный идентификатор (auto_increment / identity) из одного запроса в другом запросе, обычно для этого есть функция.

Например, в SQL Server вы используете функцию scope_identity() для получения идентификатора, созданного в предыдущем запросе.

В Access вы используете @identity.В MySQL вы используете last_insert_id().

...