2010-10-13 5 views
3

J'expérimente avec Liquibase, en essayant de l'obtenir pour copier une base de données à une autre. Malheureusement, je continue à avoir cette erreur:Erreur lors de l'utilisation de Liquibase sur SQL Server

Implicit conversion from data type varchar to varbinary is not allowed. Use the CONVERT function to run this query.

SQL il est générateur est ici:

CREATE TABLE [dbo].[Attachment] (
    [Applicantid] uniqueidentifier NOT NULL, 
    [Attachmentid] uniqueidentifier CONSTRAINT DF_Attachment_Attachmentid DEFAULT '(newid())' NOT NULL, 
    [AttachmentType] INT CONSTRAINT DF_Attachment_AttachmentType DEFAULT 0 NOT NULL, 
    [FileAttachment] image NOT NULL, 
    [FileName] ntext NOT NULL, 
    [FileType] nvarchar(125) NOT NULL, 
    [Filesize] INT NOT NULL, 
    [CCN] varbinary(8) CONSTRAINT DF_Attachment_CCN DEFAULT '0' NOT NULL, 
    [CreateDate] DATETIME CONSTRAINT DF_Attachment_CreateDate DEFAULT (getdate()) NOT NULL, 
    [LastUpdate] DATETIME CONSTRAINT DF_Attachment_LastUpdate DEFAULT (getdate()) NOT NULL, 
    CONSTRAINT [PK_Attachment] PRIMARY KEY (Attachmentid) 
): 
+0

J'sais à propos liquibase, mais ma solution générale pour tous les problèmes de conversion de type de données entre les bases de données est de charger les données dans une table de mise en scène qui manque de contraintes et d'utilisations en tant que types de données généraux que possible. Utilisez ensuite des conversions explicites pour déplacer les données vers votre table de destination. La seule colonne que vous avez ici est varbinary est la colonne CCN, donc je commencerais là ... est-il possible que vous essayez de mettre quelque chose dans cette colonne qui n'est pas varbinary (8)? – Twelfth

Répondre

2

Ces gars du projet liquibase doivent apprendre quelques petites choses sur les versions les plus récentes de SQL Server - 2005 et plus :

  • NTEXT est depuis longtemps obsolète - utiliser NVARCHAR(MAX) à la place
  • IMAGE est depuis longtemps obsolète, trop - utiliser VARBINARY(MAX) à la place

(ces types de données seraient OK si vous traitez avec SQL Server 2000 ou plus tôt, cependant). Plus: juste à partir de cette définition de table, il n'y a aucun moyen de comprendre pourquoi vous obtenez cette erreur. Est-ce votre table d'origine (source), ou est-ce que c'est ce que Liquibase génère comme table cible? Si oui, avez-vous la possibilité de voir/suivre/inspecter les instructions SQL utilisées pour migrer les données de l'ancienne à la nouvelle table?

Peut-être il y a un que vous y colonne varchar qui essayez de convertir en varbinary implicitement ...

+0

Page d'accueil de Liquibase. - http://www.liquibase.org/ – JNK

+1

Merci pour le pointeur sur les types de données, la prochaine version de la liquibase utilisera les nouveaux types –

Questions connexes