Получить данные из последней введенной строки - PullRequest
1 голос
/ 15 декабря 2011

Я пытаюсь выяснить, как я могу получить имя и фамилию из оператора INSERT, который я только что использовал.Он создал строку, и я хочу использовать имя и фамилию для использования в следующем операторе вставки. Как мне поступить?

Ответы [ 3 ]

4 голосов
/ 15 декабря 2011

Использование output!

INSERT INTO dbo.Activity (
    ContactID, 
    ActivityDate, 
    ActivityName, 
    ActivityNote, 
    ActivityOwner
)
SELECT 
    ContactID, 
    GETDATE(), 
    'Contact ' + ContactFirstName + ' ' + ContactLastName, 
    'Contact was added by the system.', 
    'System'
FROM (
    INSERT INTO dbo.Contacts (ContactFirstName,ContactLastName,ContactCompany) 
    OUTPUT inserted.ContactID, inserted.ContactFirstName, inserted.ContactLastName
    VALUES ('Richard','Burns',NULL)
) x

Подробнее о магии output, см. Здесь .

Вы также можете использовать триггер на столе, чтобы сделать его более автоматическим, вместо того, чтобы каждый раз вставлять его вручную. Также используются таблицы inserted / deleted.

Вы бы сделали это с помощью:

CREATE TRIGGER Contact_LogActivity ON dbo.Contacts FOR INSERT AS
INSERT INTO dbo.Activity (
    ContactID, 
    ActivityDate, 
    ActivityName, 
    ActivityNote, 
    ActivityOwner
)
SELECT
    ContactID,
    GETDATE(), 
    'Contact ' + ContactFirstName + ' ' + ContactLastName, 
    'Contact was added by the system.', 
    'System'
FROM
    Inserted

Теперь, когда любая строка вставляется в Контакты, она регистрирует ее в Activity. Подробнее о триггерах см. здесь .

0 голосов
/ 15 декабря 2011

Я думаю, что вы ищете вставку с оператором выбора. Попробуйте это:

    INSERT INTO dbo.Activity (ContactID, ActivityDate, ActivityName, ActivityNote, ActivityOwner)
    SELECT @idnt, '12/13/2011 10:55AM', 'Contact ' + ContactFirstName + ' ' + ContactLastName + ', was automatically added by the system', 'Contact was automatically added by this system', 'System'
    FROM Contacts
    WHERE ContactId = @idnt
0 голосов
/ 15 декабря 2011

Используя идентификатор, обнаруженный SCOPE_IDENTITY(), запросите таблицу и захватите ContactFirstName и ContactLastName в объявленные вами переменные: @fname и @lname соответственно:

...
SELECT @idnt = SCOPE_IDENTITY()

SELECT
    @fname = ContactFirstName
  , @lname = ContactLastName
FROM dbo.Contacts 
WHERE YOUR_IDENTITY_COLUMN_HERE = @idnt

INSERT INTO dbo.Activity ...

ЗаменитьYOUR_IDENTITY_COLUMN_HERE с именем столбца идентификатора, из которого вы предполагаете получить SCOPE_IDENTITY() и проверить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...