2016-08-06 1 views
1

J'ai lu ce fil: SSIS : Dynamically passing Table names et c'est exactement ce que j'essaie d'atteindre. Je suis arrivé au point de créer la variable de chaîne.Noms de table passants dynamiquement - en utilisant la commande SQL de la variable

Cependant, dans l'éditeur de source OleDB, quand j'ai choisi d'utiliser la commande SQL de variable, l'aperçu a donné l'invite d'erreur suivant:

Exception de HRESULT: 0xC0202009 Erreur au flux de données Tâche [OLE DB Source [ 37]]: Code d'erreur SSIS DTS_E_OLEDBERROR. Une erreur OLE DB s'est produite. Code d'erreur: 0x80040E14. Un enregistrement OLE DB est disponible. Source: "Microsoft SQL Server natif client 11.0" Hresult: 0x80040E14 Description: "Énoncé (s) n'a pas pu être préparé.". Un enregistrement OLE DB est disponible. Source: "Microsoft SQL Server natif Client 11.0" Hresult: 0x80040E14 Description: "Doit déclarer la variable de table" @ ".".

Appréciez un peu d'aide sur ce qui pourrait être le problème ici.

Voici les composants que j'ai configurés.

tâche d'exécution SQL:

SELECT nom de sys.tables WHERE nom comme '% $ Société Information'Order par nom Set Résultat: Nom de la variable = utilisateur :: IndivTableName; Nom du résultat = 0; Type de données = objet

pour chaque conteneur Loop:

recenseur: énumérateur ADO Foreach

ADO variable Source Object: User :: IndivTableName

mode Enumeration: lignes dans la première tableau

(Est-ce nécessaire?) Mappages de variables: Variable = Utilisateur :: Indivable; Index = 0; Type de données = objet

Chaîne variable:

Nom de la variable: l'utilisateur :: CompanyInformation

Expression: « , sélectionnez [nom], [adresse], [adresse 2], [ville ], [numéro d'enregistrement _], [type d'entreprise [téléphone pas _], [no_ fax], [TVA Numéro d'enregistrement _]] de "+ "@ [User :: IndivTableName]"

Evaluated Valeur: sélectionnez [ nom], [adresse], [adresse 2], [ville], de @ [User :: IndivTableName]

données Source Editor [téléphone pas _], [fax no_], [TVA Numéro d'enregistrement _], [numéro d'enregistrement _], [type d'entreprise] :

mode d'accès aux données: commande SQL de variables

nom de la variable: l'utilisateur :: CompanyInformation

Valeur variable: sélectionnez [nom], [adresse], [adresse 2], [ville ], [téléphone no _], [fax no_],[No _ enregistrement de la TVA][numéro d'enregistrement _], [type d'entreprise] de @ [User :: IndivTableName]

Répondre

0

applications variables à énumérateur ADO Foreach sont obligatoires, vos correspondances sont ok. Veuillez modifier le type de données de la variable User :: IndivTable en chaîne.

Change variable 'utilisateur :: CompanyInformation' expression

"select [name],[address],[address 2],[city],[phone no_],[fax no_], 
[VAT Registration no_],[registration no_],[business type] from " + [User::IndivTable] 

variable utilisateur :: IndivTableName contient DataTable, donc il ne peut pas être utilisé dans l'expression. Vous itérez dessus et stockez la première colonne dans User :: IndivTable variable.

+0

Bonjour, j'ai changé le type de données de User :: IndivTable en String et j'ai également mis à jour l'expression User :: CompanyInformation comme indiqué, mais cela provoque toujours la même erreur. Dois-je configurer une valeur ou une expression par rapport à cette variable IndivTable? –

+0

@JamieLim, pouvez-vous configurer un point d'arrêt sur DataFlow, vérifier la valeur de * User :: CompanyInformation * et le mettre ici. – Ferdipux

+0

Salut @Ferdipux, j'ai réussi à résoudre ce problème. User :: IndivTable mis en place avec Datatype = String et Value = le premier résultat de la tâche Execute SQL. L'expression finale utilisée pour User :: CompanyInformation est: "SELECT [nom], [adresse], [adresse 2], [ville], [n ° de téléphone], [fax no_], [enregistrement de TVA non _], [enregistrement non _], [type d'entreprise] FROM "+" ["+ @ IndivTable +"] " –