У вас есть несколько способов пойти сюда.
- Если это одноразовая загрузка таблицы, я бы рекомендовал использовать SET IDENTITY_INSERT ON перед вставкой. Это позволит вам самостоятельно вставлять идентификационную информацию, тем самым отрицая необходимость извлечь ключ. Вам нужно будет использовать задачу сценария или такую, чтобы создать последовательность клавиш.
- Используйте задачу SQL Command для выполнения вставки stat, а затем выполните SELECT SCOPE_IDENTITY(), чтобы вывести идентификатор вставки в параметр, возвращаемый из задачи SQL Command. Это рискованно, поскольку вы не можете быть guranteed @@. Это реальный риск, если с другими пользователями происходит несколько вложений.
Итак, если вы решите пойти на # 2, вот как вы это сделаете.
Создание двух таблиц для представления вашего старого Sytem и новая система:
CREATE TABLE [dbo].[Person](
[ID] [int] IDENTITY(100,1) NOT NULL,
[FirstName] [varchar](50) NULL,
[LastName] [varchar](50) NULL
) ON [PRIMARY];
CREATE TABLE [dbo].[Person_OldSystem](
[ID] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [varchar](50) NULL,
[LastName] [varchar](50) NULL
) ON [PRIMARY];
Заполнить лицо таблицы с двумя входами:
alt text http://www.freeimagehosting.net/uploads/ff56e32bea.gif
Создайте хранимую процедуру для вставки и возврата новый идентификатор:
ALTER PROCEDURE [dbo].[sp_InsertPerson]
@Fname varchar(50),
@Lname varchar(50),
@id integer OUTPUT
AS
BEGIN
INSERT INTO QandA..Person (FirstName, LastName) VALUES (@Fname, @Lname);
SELECT @id = SCOPE_IDENTITY();
END
Затем мы настроим пакет SSIS. В этом примере пакета добавьте одну задачу потока данных. В Задаче потока данных добавьте следующие задачи и подключите их, как показано.
alt text http://www.freeimagehosting.net/uploads/5348332a9e.gif
Примечание телезрители данных там, чтобы показать вам результаты, как мы продвигаемся.
Настройте исходную задачу OLE DB, чтобы вытащить все столбцы из таблицы Person_OldSystem.
Настройка Производный столбец задач, чтобы добавить столбец под названием '' NewID
alt text http://www.freeimagehosting.net/uploads/a5c6c9e7c6.gif
Настройте OLE DB Command Task со следующим SQL.
EXEC sp_InsertPerson ?, ?, ? OUTPUT
В окне Дополнительные свойства в OLE DB Задача Команда, установите на следующие отображения столбцов:
alt text http://www.freeimagehosting.net/uploads/2224622431.gif
Так что мы сделали с потоком данных, чтобы извлечь список людей из старой системы. Затем мы добавляем новый столбец под названием NewID, чтобы сохранить личность строки, когда она вставлена в новую таблицу.
alt text http://www.freeimagehosting.net/uploads/8162127377.gif
БД Команда OLE вызывает нашу хранимую процедуру, которая делает вставку и reutrn идентификатор новой строки в последнем параметре. Этот возвращенный идентификатор затем отображается в столбец в потоке данных, который мы для него готовы.
alt text http://www.freeimagehosting.net/uploads/97dbfba277.gif
Условное разделение есть, чтобы дать поток данных куда-то идти.
Как вы предлагаете получить идентификатор человека из первой вставленной таблицы? –