2010-02-05 4 views
0

У меня есть запрос SQL, который работает, он делает вставки правильные данные, но идентификаторы не синхронизированы:SQL Insert Query (синтаксис вопрос)

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

Спасибо и приветствую.

+1

Какую базу данных вы используете? –

+0

MS SQL Server 2008 – Phil

ответ

2

Прежде чем вы сделаете два своих ввода, я получу значение MAX для 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

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

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

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

0

Является ли идентификатор CANRADконтактов обозначенным как идентификатор? Если да, просмотрите документацию для @@identity.

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

Для этого вам необходимо сделать вставку на контактах CANRAD перед вставкой на CANRADcollreg.