web-dev-qa-db-fra.com

Comment transférer des données à l'aide de SSIS lorsque les colonnes de base de données sont définies comme VARCHAR (MAX)?

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)?

24
user1947874

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.

Before

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.

Execution

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.

After

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...

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.

Data type

Voici les mappages pour les types de données SQL Server VARCHAR (MAX) et NVARCHAR (MAX) dans SSIS.

VARCHAR (MAX) ---> flux de texte [DT_TEXT]

NVARCHAR (MAX) ---> Flux de texte Unicode [DT_NTEXT]

En savoir plus sur Types de données MSDN Integration Services

J'espère que ça t'as aidé.

43
user756519