【发布时间】:2019-04-08 13:22:39
【问题描述】:
我对 SSIS OLE DB 命令有疑问。
我要做的是插入“person”表并从插入中获取新创建的PersonID(表标识),因为我需要它来创建与 PersonContactInfo 表的关系,这应该是很简单。
我无法编写存储过程,并且大约有 10k 行,因此使用 OLE DB 命令应该没问题。
我已尝试编写此代码,它应该匹配:
DECLARE @PersonID int
---
--- create new person
---
INSERT INTO [dbo].[Personer_LF_TEST] (Fornavne, Efternavne, Oprindelse, OprettetDato, OprettetAf,OprindelseID)
VALUES (?, ?, 'Klimaquiz', ?, 499,7)
SET @PersonID = (SELECT SCOPE_IDENTITY())
---
--- update phonenumber
---
INSERT INTO [dbo].[Kontaktinfo_LF_TEST](PersonID, KontaktInfoTypeID, Notat, Tekst, Oprettet)
VALUES (@PersonID, 5, ?,?, Getdate() )
---
--- update Email
---
INSERT INTO [dbo].[Kontaktinfo_LF_TEST](PersonID, KontaktInfoTypeID, Notat, Tekst, Oprettet)
VALUES (@PersonID, 2,?, ?, Getdate() )
---
--- create persontypecode
---
INSERT INTO [dbo].[PersonArtskoder_LF_TEST](PersonID, ArtskoderID, Notat, Aktiv, CreatedBy, CreatedOn, ModifiedBy, ModifiedOn, StartDato, SlutDato)
VALUES (@PersonID,?, ?, 1, 209, getdate(), 209, getdate(), getdate(), NULL )
我也尝试过像这样成功运行第一部分:
-- Create new Person
INSERT INTO [dbo].[Personer_LF_TEST](Fornavne, Efternavne, Oprindelse, OprettetDato, OprettetAf, OprindelseID)
VALUES (?, ?,'Klimaquiz',?,499,7)
插入 10k 行
如果尝试这样做,它会失败
-- Create new person
INSERT INTO [dbo].[Personer_LF_TEST](Fornavne, Efternavne, Oprindelse, OprettetDato, OprettetAf, OprindelseID)
VALUES(?, ?, 'Klimaquiz', ?, 499, 7)
-- Insert Phone number
INSERT INTO [dbo].[Kontaktinfo_LF_TEST](PersonID, KontaktInfoTypeID, Tekst, Oprettet)
VALUES (1, 5, ?, Getdate())
错误是:
数据流任务 [OLE DB 命令 [178]] 出错:SSIS 错误代码 dts_E_OLEDBERROR。发生了 OLE DB 错误。
错误代码:0x80004005。 OLE DB 记录可用。来源: ” Microsoft SQL Server Native Client 11.0" Hresult:0x80004005 说明:“插入值列表与列列表不匹配”
但输入应与列列表匹配。
这是我希望 OLD DB 命令执行的“有点”代码
DECLARE @PersonID int
---
--- create new person
---
INSERT INTO [dbo].[Personer_LF_TEST](Fornavne, Efternavne, Oprindelse, OprettetDato, OprettetAf,OprindelseID)
VALUES ('Simster', 'Mann', 'Klimaquiz', '03-25-2019', 499,7)
SET @PersonID = (SELECT scope_identity())
---
--- update phonenumber
---
INSERT INTO [dbo].[Kontaktinfo_LF_TEST](PersonID, KontaktInfoTypeID, Notat, Tekst, Oprettet)
VALUES (@PersonID, 5, 'WEB','22004400', Getdate() )
---
--- update Email
---
INSERT INTO [dbo].[Kontaktinfo_LF_TEST](PersonID, KontaktInfoTypeID, Notat, Tekst, Oprettet)
VALUES (@PersonID, 2,'WEB', 'Simster@codewithme.dk', Getdate() )
---
--- create persontypecode
---
INSERT INTO [dbo].[PersonArtskoder_LF_TEST](PersonID, ArtskoderID, Notat, Aktiv, CreatedBy, CreatedOn, ModifiedBy, ModifiedOn, StartDato, SlutDato)
VALUES (@PersonID,'30395', 'WEB', 1, 209, getdate(), 209, getdate(), getdate(), NULL )
【问题讨论】:
-
如果我在 SSMS 中使用虚拟数据执行此查询,我执行它没有问题
标签: sql-server tsql ssis