Как я могу использовать автоматически сгенерированный идентификатор записи, которую я добавил в последующем задании?
В настоящее время я добавляю некоторые записи в таблицу, используя OLE DB Destination
, Каждая запись имеет автоматически сгенерированный Id
поле. Я хочу использовать это сгенерированное Id
поле в качестве внешнего ключа в некоторых дочерних записях.
Я думал, что смогу к линии потока данных от одного OLE DB Destination
компонент к другому, но это не поддерживается.
Я бы подумал, что это общая проблема - как другие решают ее?
2 ответа
Я закончил тем, что использовал подход, описанный здесь:
В моем случае это выглядело примерно так:
INSERT INTO dbo.Benefit
(PeriodId,
BenefitCode,
...)
VALUES (
?,
?,
...);
SELECT ? = SCOPE_IDENTITY()
обходные
(1) Создание значений идентичности с использованием компонента Script
До
DataFlow Task
добавитьExecute SQL Task
что вернутьMAX(ID)
из этой таблицыSELECT MAX(ID) FROM MY_TABLE
Сохраните результат в переменной (например,
@[User::MaxID]
) используяSingle Row
ResultSet- В задаче DataFlow Добавить компонент сценария отметьте
@[User::MaxID]
какReadOnly
переменная - Добавить столбец вывода типа
DT_I4
(например:NewID
) В редакторе скриптов используйте следующий код (я использовал язык Visual Basic)
Imports System Imports System.Data Imports System.Math Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper Imports Microsoft.SqlServer.Dts.Runtime.Wrapper <Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _ <CLSCompliant(False)> _ Public Class ScriptMain Inherits UserComponent Private CurrentID as Integer = 0 Public Overrides Sub PreExecute() MyBase.PreExecute() CurrentID = Me.Variables.NewID End Sub Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) CurrentID += 1 Row.NewID = CurrentID End Sub End Class
в
OLEDB Destination
проверитьKeep identity
вариант, и КартаNewID
столбец к столбцу идентификатора назначения
Тогда вы можете использовать NewID
столбец перед тем, как эти данные импортируются в пункт назначения OLEDB, поскольку в этом обходном пути прогнозируются значения идентификаторов. (Вы можете добавить компонент Multicast для дублирования потока данных, если вам нужно выполнить другую операцию параллельно)
Рекомендации
- Как получить доступ к переменным пакета ssis внутри компонента скрипта
- Использование переменных в компоненте скрипта
- Сопоставить результирующие наборы с переменными в задаче "Выполнение SQL"
- Основы служб SSIS: использование задачи "Выполнение SQL" для генерации наборов результатов
(2) Используйте промежуточный стол
- Создайте промежуточную таблицу со столбцом идентификаторов
- Вставить данные в промежуточную таблицу
- Используйте промежуточную таблицу в задаче потока данных