2013-03-12 4 views
0

J'ai besoin de lire les lignes d'un ensemble de fichiers CSV et de les écrire dans une table existante de ma base de données. Pour ce faire cependant, j'ai besoin de combiner les données de fichier plat avec 2 valeurs sélectionnées d'une table dans ma base de données. J'ai construit une conception dans SSIS qui devrait permettre cela, en utilisant une transformation Lookup. Cependant, cela ne fonctionne pas :(Combinaison de la recherche OLE DB avec le fichier plat SSIS

Voilà ma conception:

enter image description here

Quand je debug je reçois le message:

Error at Contacts [SSIS.Pipeline]: input column "ObjectId" (914) has lineage ID 709 that was not previously used in the Data Flow task. 
Error at Contacts [SSIS.Pipeline]: "component "OLE DB Destination" (134)" failed validation and returned validation status "VS_NEEDSNEWMETADATA". 
Error at Contacts [SSIS.Pipeline]: One or more component failed validation. 
Error at Contacts: There were errors during task validation. 
(Microsoft.DataTransformationServices.VsIntegration) 

ObjectId est un entier que je choisissais l'intérieur de la Recherche La requête entière pour la recherche est:

DECLARE @ObjectId int 
Select @ObjectId = (SELECT TOP (1) [Value] as ObjectId 
FROM dbo.Sequences WHERE (Name = 'Contact')); 
UPDATE Sequences SET Value = Value + 1 WHERE (Name = 'Contact'); 
SELECT ObjectId = @ObjectId, Reference = N'CU' + cast(@ObjectId as VARCHAR(20)) 

Cette requête fonctionne parfaitement dans l'aperçu. Quelqu'un peut-il me dire ce que je fais de mal? Toutes mes excuses pour mon ignorance, mais c'est la première chose que j'ai faite dans SSIS.

Update 1 (voir la réponse @billinkc)

Nouveau design:

enter image description here

Nouvelle erreur :(

Error at Contacts [Lookup Sequence [531]]: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005. 
An OLE DB record is available. Source: "Microsoft SQL Server Native Client 10.0" Hresult: 0x80004005 Description: "Syntax error, permission violation, or other nonspecific error". 
Error at Contacts [Lookup Sequence [531]]: OLE DB error occurred while loading column metadata. Check SQLCommand and SqlCommandParam properties. 
Error at Contacts [SSIS.Pipeline]: "component "Lookup Sequence" (531)" failed validation and returned validation status "VS_ISBROKEN". 
Error at Contacts [SSIS.Pipeline]: One or more component failed validation. 
Error at Contacts: There were errors during task validation. 
(Microsoft.DataTransformationServices.VsIntegration) 

Répondre

1

Votre recherche devrait être en ligne après la Génération EntityGUID et pas une union Mais, en regardant votre code Lookup, ce n'est pas comment une recherche va fonctionner . Une recherche est un type d'opération en lecture seule

Au lieu de cela, vous souhaiterez le changer en objet de commande OLE DB.

Enfin, ce code SQL vous devez générer ces ID. C'est ... Cela pourrait être fait plus efficacement, si cela vous intéresse.

+0

Je l'ai vraiment changé. C'est maintenant en ligne, mais j'ai toujours une erreur. Mettra à jour ma question sous peu. Et oui, je suis intéressé. S'il vous plaît, faites-moi savoir. – Kev

0

J'ai eu une erreur similaire 0x80004005 me conduire écrous. Mon déboguage a pointé vers la source OLEDB mais en réalité c'était parce que j'avais changé ma connexion pour définir RetainSameConnection à true pendant le test, et il fallait remettre à false. Alors vérifiez toutes vos connexions, et tout ce que vous avez changé.

Questions connexes