Получить ID при массовой вставке - PullRequest
0 голосов
/ 29 декабря 2010

Я вставляю данные таблицы SQL через XML-файл

<root>
  <Attributedata>
    <AttributeLabelID>-1</AttributeLabelID>
    <ProductID>1</ProductID>
    <AttributeLabel>User Label</AttributeLabel>
    <AttributeTypeID>1</AttributeTypeID>
    <Value>
        <valueID>-1 </valueID>
        <Uservalue>sss </Uservalue>
        <ProductAttributelID>1</ProductAttributelID>
    </Value>
    <Value>
        <valueID>-1 </valueID>
        <Uservalue>sss </Uservalue>
        <ProductAttributelID>1</ProductAttributelID>
    </Value>
    <CreatedBy >1</CreatedBy>
</Attributedata>
<Attributedata>

    <AttributeLabelID>-1</AttributeLabelID>
    <ProductID>1</ProductID>
    <AttributeLabel>User Label</AttributeLabel>
    <AttributeTypeID>1</AttributeTypeID>
    <Value>
        <valueID>-1 </valueID>
        <Uservalue>sss </Uservalue>
        <ProductAttributelID>1</ProductAttributelID>
    </Value>

    <CreatedBy >1</CreatedBy>
</Attributedata>
<Attributedata>

    <AttributeLabelID>-1</AttributeLabelID>
    <ProductID>1</ProductID>
    <AttributeLabel>User Label</AttributeLabel>
    <AttributeTypeID>1</AttributeTypeID>
    <Value>
        <valueID>-1 </valueID>
        <Uservalue>sss </Uservalue>
        <ProductAttributelID>1</ProductAttributelID>
    </Value>
    <Value>
        <valueID>-1 </valueID>
        <Uservalue>sss </Uservalue>
        <ProductAttributelID>1</ProductAttributelID>
    </Value>
    <CreatedBy >1</CreatedBy>
</Attributedata>
</root>

В таблице 1 Attributevalueid автоматически генерируется и является первичным ключом.Я хочу вставить в это время Attributevalueid в другую таблицу table2 - как это возможно с помощью хранимой процедуры?

Ответы [ 3 ]

1 голос
/ 02 августа 2011

Используйте предложение OUTPUT :

DECLARE @t TABLE ( AttributeValueId int )

INSERT TABLE_NAME ( ... )
SELECT ...
FROM ....
OUTPUT 
    Inserted.AttributeValueId INTO @t

INSERT OTHER_TABLE ( ... )
SELECT AttributeValueId
FROM @t
1 голос
/ 29 декабря 2010

Возможно, вам следует использовать триггер.

Пожалуйста, ответьте на ваши вопросы.

0 голосов
/ 29 декабря 2010

Я согласен с триггерным ответом, но вы также можете изменить поле с Identity на обычное int и использовать таблицу счетчиков. Это потребует некоторой дополнительной логики с вашей стороны, но не так много, и вы сможете сохранить всю свою бизнес-логику в своем приложении.

Я бы все равно согласился на предложение. Я предлагаю это только как альтернативу, которая хорошо работает для меня в других ситуациях.

...