web-dev-qa-db-fra.com

Erreur "... le OLE DB Source.outputts [OLE DB Source Sortie] .Columns [xxxxxxxxx] sur la sortie de non-erreur n'a pas de sortie correspondante

Ive a passé des heures à essayer de résoudre ce problème. Pour la colonne qui me donne le problème, j'utilise une fonction scalaire dans SQL Server pour saisir le nom. La fonction est correcte et fonctionne bien. J'utilise ensuite une procédure stockée à utiliser avec SSIS. La colonne qui me donne l'erreur indique qu'elle n'a pas de colonne de sortie correspondante sur la sortie d'erreur. Tout semble aller bien. J'ai fait ce qui suit les recommandations précédentes:

  1. Source et destination supprimées et tout remodelé
  2. Modifié la propriété de retardvalidation vers true
  3. Changement maximum d'erreur comptez sur 100
  4. Décoché et recharger des colonnes externes disponibles dans la source

Celles-ci étaient des recommandations par des forums précédents.

Je suis un stagiaire et je veux obtenir cela seul sans avoir à demander à mon responsable. J'ai passé d'innombrables heures à essayer de résoudre le problème.

Aucune suggestion?

Modification pour ajouter de la valeur à la question

Ce qui suit est ma requête dans mon OLE DB Source

SELECT *
FROM RExtenstionBase R
LEFT OUTER JOIN AExtensionBase A
ON R.ASN = A.SN
AND R.ARN = A.R

Cette requête me donne les champs dont j'ai besoin de Dynamics CRM.

Voici mon appel de procédure stockée dans la commande OLE DB commande:

EXEC InsertRepairs ?,?,?,?,?,?,?,?,?,?

Ce qui suit est mon script de procédure stockée:

USE [MSCRM_RC]
GO


SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[InsertRepairs] 
    -- Add the parameters for the stored procedure here

    @ROID nvarchar(100),
    @AType nvarchar(100),
    @ARN nvarchar(100),
    @DateReceived datetime,
    @RForRR nvarchar(100),
    @C nvarchar(100),
    @SN nvarchar(100),
    @ASN nvarchar(100),
    @Performed nvarchar(100),
    @COR decimal


AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    DECLARE @newID AS UNIQUEIDENTIFIER
    SET @newID = NEWID()

INSERT INTO [dbo].[A_RBase] /***BASE TABLE ALWAYS THE SAME ***/
           ([A_RCRIDID] /*Always change this tho */
           ,[CreatedOn]
           ,[CreatedBy]
           ,[ModifiedOn]
           ,[ModifiedBy]
           ,[CreatedOnBehalfBy]
           ,[ModifiedOnBehalfBy]
           ,[OwnerId]
           ,[OwnerIdType]
           ,[OwningBusinessUnit]
           ,[statecode]
           ,[statuscode]
           ,[ImportSequenceNumber]
           ,[OverriddenCreatedOn]
           ,[TimeZoneRuleVersionNumber]
           ,[UTCConversionTimeZoneCode])
     VALUES
           (@newID
           ,GETUTCDATE() -- CreatedOn
           ,'XXXXXXXXXXXXXXXXXXXXXXX' -- CreatedBy
           ,GETUTCDATE()                            -- ModifiedOn
           ,'XXXXXXXXXXXXXXXXXXXXXXX'   -- ModifiedBy
           ,NULL                                    -- CreatedOnBehalf
           ,NULL                                    -- Modified''
           ,'XXXXXXXXXXXXXXXXXXXXXXX'   -- OwnderId
           ,8
           ,'XXXXXXXXXXXXXXXXXXXXXXX'
           ,0                                       -- statecode
           ,1                                       -- statuscode
           ,5                                       -- ImportSequenceNumber
           ,NULL                                -- Overrid
           ,0                                       -- TimeZoneRule 
           ,NULL)                                   -- UTCConversion




INSERT INTO [dbo].[A_RExtensionBase]
           ([A_RCRID]
        ,[A_Name]
           ,[A_AType]
        ,[A_ARN]
           ,[A_DateReceived]
           ,[A_RForRR]
        ,[A_C]
        ,[A_SN]
        ,[A_ASN]
           ,[A_Performed]
           ,[A_COR])
     VALUES
           (@newID,
         @ROID,
         @AType,
         @ARN,
            @DateReceived,
            @RForRR,
         @C,
         dbo.Lookup_SNID_GUID(@SN)
         @ASN,
            @Performed ,
         @COR)


END

Voici ma fonction de valorisation scalaire:

USE [MSCRM_RC]
GO


SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER FUNCTION [dbo].[Lookup_SNID_GUID] 
(
      -- Add the parameters for the function here
      @SN_Name nvarchar(100)
)
RETURNS UNIQUEIDENTIFIER
AS
BEGIN
      -- Declare the return variable here
      DECLARE @SN_GUID UNIQUEIDENTIFIER
      SELECT @SN_GUID = SNID

      FROM SNExtensionBase
      WHERE name = (@SN_Name)

      RETURN @SN_GUID
END
15
Squ1rr3lz

Apparemment, il s'agit d'un bogue commun avec les packages SSIS. Je l'ai eu pour éliminer l'erreur en perçant dans la source OLE DB, en cliquant sur l'onglet Colonnes, recherchant la colonne externe disponible incluse dans le message d'erreur, puis décochez la case Cochez la case. Recherchez-le. Erreur résolue!

77
Squ1rr3lz

Je suis tombé sur la "sortie d'erreur" sans sortie correspondante "" assez souvent, lors de l'ajout d'une nouvelle colonne à une table qui doit être traitée par un package SSIS existant. Ce bogue est venu avec un message d'erreur disant qu'une "valeur ne tombe pas dans la plage attendue".

Une colonne nouvellement ajoutée doit être traitée par un package SSIS existant. Le comportement attendu est que les SSI reconnaîtront qu'il existe une nouvelle colonne et sélectionnera cette colonne sur la page Colonnes de la SSIS de tâches Source OLDED à traiter. Toutefois, lors de l'ouverture de la tâche source OLEDB pour la première fois après avoir modifié le tableau, j'ai reçu deux fois le message d'erreur suivant: "La valeur ne tombe pas dans la plage attendue." Le message d'erreur s'est apparu lors de l'ouverture de l'éditeur et lors de l'ouverture de la page Colonnes de l'éditeur. Dans le rédacteur en chef avancé de la tâche Source OLDED, la nouvelle colonne est apparue dans l'arborescence de colonnes OLEDB Source Sortie, mais pas dans l'arborescence de colonnes de sortie d'erreur source OLEDB. C'est le problème sous-jacent réel du message d'erreur. Malheureusement, il semble y avoir aucun moyen d'ajouter la colonne manquante manuellement.

Pour résoudre le problème, supprimez et ré-ajoutez la colonne nouvellement ajoutée de la page Columnns de l'éditeur normal comme mentionné par Jeff.

Probablement, il convient de mentionner que la source de données de la tâche source OLEDB était une vue MDS modifiée. Microsoft CRM Dynamics utilise également des vues. Cela me conduit à la conclusion, que l'utilisation de vues comme source de données peut produire l'une des erreurs mentionnées ci-dessus, lors de la modification de types de données ou d'ajouter/supprimer des colonnes.

Thread associé: Comment réparer la SSIS: "Valeur, ne tombe pas dans la plage prévue"?

La solution de contournement décrits fait référence à Visual Studio 2008 version 9.0.30729.4462 QFE avec MIRSPORSOFT.NET Framework 3.5 SP1. La base de données est SQL Server 2008 R2 (SP2).

2
Marcus Belz

Corrigez-moi si je me trompe, mais j'ai trouvé que vous avez cliqué sur le bouton Aperçu lorsque vous obtenez des données de la source, provoque des longueurs erronées pour les colonnes, en particulier pour les chaînes.
[.____] Cela pourrait être dû à la longueur des données de prévisualisation obtenues. Ainsi, une meilleure pratique consiste à cliquer sur l'onglet Colonnes dans la boîte de dialogue source après la sélection de la table source. Ceci est le cas principalement avec ODBC sources.

0
RonVibbentrop