Je reçois le message ci-dessous lors de l'exécution d'un package.
Le texte a été tronqué ou un ou plusieurs caractères n’ont pas de correspondance dans la page de codes cible.
Je prends des données d'une table SQL qui a un nom de champ task_teammember
Avec le type de données VARCHAR(MAX)
. L'exécution du package échoue à la source. Je tape casté la colonne task_teammber
Dans VARCHAR(8000)
qui exécute le paquet sans aucun message d'erreur. Cependant, la destination ne reçoit que 80 caractères alors qu'il y a plus de 80 caractères dans la table source.
Comment transférer toutes les données des tables source vers les tables de destination à l'aide de SSIS lorsque les colonnes sont définies comme VARCHAR(MAX)
?
Vous devez utiliser le type de données SSIS text stream [DT_TEXT]
pour extraire des données des colonnes de table SQL Server de type de données varchar(MAX)
Voici un exemple simple qui illustre comment SSIS déduit automatiquement les types de données de la source. L'exemple utilise la base de données SQL Server 2008 R2 et SSIS 2008 R2
Créez les tableaux suivants dans la base de données SQL Server pour stocker le texte source et utilisez la destination pour insérer le texte à l'aide du package SSIS.
CREATE TABLE [dbo].[SourceTable](
[Id] [int] IDENTITY(1,1) NOT NULL,
[SourceText] [varchar](max) NOT NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[DestinationTable](
[Id] [int] IDENTITY(1,1) NOT NULL,
[DestinationText] [varchar](max) NOT NULL
) ON [PRIMARY]
Insérez du texte de grande longueur dans le tableau source. Vous pouvez voir les données dans la table source contenant plus de 10 000 caractères et la table de destination est vide avant d'exécuter le package.
Créez un package SSIS avec un gestionnaire de connexions à la base de données. Placez une tâche de flux de données sur la tâche de flux de contrôle. Dans la tâche de flux de données, placez une OLE DB Source et OLE DB Destination pour transférer les données de dbo.SourceTable
Vers dbo.DestinationTable
Ici, les captures d'écran montrent l'état d'exécution du package.
Si vous exécutez à nouveau la requête, vous verrez que la table de destination est remplie avec le texte de la table source à l'aide du package SSIS sans aucune erreur de troncature.
Revenez à l'onglet de tâche de flux de données du package et cliquez avec le bouton droit sur OLE DB Source
, Puis cliquez sur Show Advanced Editor...
Dans Advanced Editor for OLE DB Source
, Cliquez sur l'onglet Propriétés d'entrée et de sortie. Développez External Columns
Et sélectionnez SourceText
. Vous remarquerez que le SSIS définit le type de données de la colonne sur le texte stream [DT_TEXT]
En fonction du type de données VARCHAR(MAX)
défini sur la table source.
Voici les mappages pour les types de données SQL Server VARCHAR (MAX) et NVARCHAR (MAX) dans SSIS.
En savoir plus sur Types de données MSDN Integration Services
J'espère que ça t'as aidé.