SSIS 2008. Tâche très simple. Je souhaite récupérer une variable système et l'utiliser dans un insert SQL. Je souhaite récupérer la valeur du système Utilisation de l'instruction Utilisation des instructions Je n'essaie pas de passer un paramètre à la requête. J'ai déjà cherché une journée mais je n'ai pas trouvé comment faire cette chose simple! P> système: Machinename code> et utilisez-le dans une instruction insertion. p>
Insérer dans Mylog (COL1) Sélectionnez @ [Système :: Machinename] Code> Donne l'erreur
ERREUR: ..Faillée à l'analyse. Doit déclarer la variable scalaire "@" code> strong> p>
Sélectionnez @System :: Machinename CODE> ou
SELECT @@ [SYSTEM :: Machinename] CODE> Donne l'erreur
'ERROR ERROR '::' code> strong> p>
4 Réponses :
Je ne l'utilise jamais avant, mais vous pouvez peut-être consulter l'utilisation de l'expression dans la tâche SQL pour cela. p>
ou simplement mettre la requête entière dans une expression d'une variable avec EvaluaeaseTexpression définie sur true. Ensuite, utilisez OLE DB pour insérer P>
+1 C'est la bonne réponse IMHO. La question de l'OP est à peu près le cas d'utilisation des expressions de la propriété SSIS. Passer les variables SSIS dans la chaîne de requête, on le concaténerait dans une expression définie pour la propriété SQLSTATIMSOURCE code>;
"Insérer dans mylog (col1) Sélectionnez" + @ [System :: Machinename] Code>. Cela ne veut pas suggérer que la réponse acceptée n'est pas un bon modèle.
Voici une façon vous pouvez le faire. Le paquet exemple suivant a été créé en utilisant L'espoir qui aide. P> SSIS 2008 R2 code> et utilise SQL Server 2008 R2 en tant que back-end. P>
dbo.PackageData code> strong> li>
Ul>
p>
SQLServer code> pour se connecter à votre base de données, par exemple à une base de données SQL Server. Li>
Exécuter la tâche SQL code> li>
Général code> de l'éditeur, définissez le
Connexion code> à votre gestionnaire de connexion nommée SQLServer. Li>
SQLStatement code>, entrez l'instruction d'insertion
INSERT INTO dbo.PackageData (PackageName) (?) Code> strong> li>
Ul>
p>
Type de données code> serait
VARCHAR code> strong>. Réglez le
Paramètre code> Nom
0 code> strong>, qui indique la valeur d'index du paramètre. Cliquez sur le bouton OK. Li>
Ul>
p>
p>
Réponse parfaite et très bien présentée. J'avais essayé ce processus avant, et ça n'a jamais fonctionné. Mon 'erreur' définit «ByPassPrepare» à FALSE, puis utilisez «Query d'analyse», qui a toujours renvoyé un message d'erreur. Cadrage «Bypass préparez-vous» à vrai était le tour secret magique. Je soupçonnais que c'était quelque chose de simple et pas bien documenté. Merci beaucoup Siva! 4 étoiles et un visage souriant pour vous.
Je venais d'apprendre ce que signifie «point d'interrogation» et que cela a du sens. Merci pour cette solution approfondie. De plus, vos images sont cassées, alors je les ai supprimées. N'hésitez pas à les ajouter.
par mon commentaire contre la réponse de @ zero (répété ici comme une réponse, il n'est donc pas négligé par les nouveaux arrivants SSIS). P>
La question de l'OP est à peu près le cas d'utilisation des expressions de la propriété SSIS. p>
Pour transmettre des variables SSIS dans la chaîne de requête, on le concaténerait dans une expression définie pour la propriété SQLSTATIMENTSOURCE: P>
Cela ne veut pas suggérer que la réponse acceptée n'est pas un bon modèle, comme en général, l'approche paramétrée est plus sûre (contre l'injection SQL) et plus rapidement (sur la réutilisation) que la manipulation de chaîne de requête directe. Mais pour une variable système (par opposition à une chaîne entrée par l'utilisateur), cette solution doit être à l'abri de l'injection SQL, ce qui sera approximativement aussi rapide ou plus rapide qu'une requête paramétrée si réutilisée (comme le nom de la machine ne change pas. ). p> "Insérer dans mylog (col1) Sélectionnez" + @ [System :: Machinename] Code> P>