Question

Je dois extraire des données BLOB d'une base de données SQL Server 2005 et générer un script SQL pour insérer ces mêmes données dans une autre base de données, sur un autre serveur.

Je ne peux le faire qu'avec des scripts SQL. Je ne peux utiliser aucun autre utilitaire ni écrire un programme en Java ou .NET pour le faire.

L’autre grande restriction que j’ai, c’est que je n’ai pas accès à la base de données d’origine (où se trouvent les données BLOB d’origine) lorsque j’exécute le script, pour copier les données BLOB dans la base de données cible. Les données doivent donc déjà être codé dans le fichier de script SQL.

Récapitulation: existe-t-il un moyen de coder les données BLOB en texte afin que je puisse les transférer dans une commande SQL INSERT dans un fichier texte de script et l'exécuter?

Je suis capable d'exécuter des instructions T-SQL spéciales et des procédures stockées si nécessaire.

Était-ce utile?

La solution

TEXTCOPY était un exemple d'application inclus dans SQL Server 7.0 et 2000 mais qui n'était plus disponible dans SQL Server 2005.

Cependant, en recherchant TEXTCOPY dans SQL Server 2005, j'ai trouvé cette alternative qui pourrait faire l'affaire:

http://sequelserver.blogspot.com/2007 /01/texcopy-sql-server-2005.html

Cela repose sur l'écriture et la lecture des données binaires du système de fichiers, ce qui dans mon cas n'est pas idéal (idéalement, j'aimerais coder les données binaires avec le fichier texte du script SQL lui-même), mais c'est le meilleur que j'ai trouvé jusqu'à présent.

Voici une autre bonne source sur la façon d'effectuer des opérations d'importation / exportation binaires à l'aide de BULK OPENROWSET: http://msdn.microsoft.com/en-us/library/ms191184. aspx

Autres conseils

Cet article Copier du texte ou une image dans ou hors de SQL Server " pourrait aider:

Vous pouvez intégrer l'outil de ligne de commande TEXTCOPY dans une procédure stockée:

CREATE PROCEDURE sp_textcopy (
  @srvname     varchar (30),
  @login       varchar (30),
  @password    varchar (30),
  @dbname      varchar (30),
  @tbname      varchar (30),
  @colname     varchar (30),
  @filename    varchar (30),
  @whereclause varchar (40),
  @direction   char(1))

AS

DECLARE @exec_str varchar (255)
SELECT @exec_str =
         'textcopy /S ' + @srvname +
         ' /U ' + @login +
         ' /P ' + @password +
         ' /D ' + @dbname +
         ' /T ' + @tbname +
         ' /C ' + @colname +
         ' /W "' + @whereclause +
         '" /F ' + @filename +
         ' /' + @direction
EXEC master..xp_cmdshell @exec_str

Vous devrez le modifier / l’étendre un peu pour pouvoir lire le fichier créé dans l’autre base de données.

Comme Vinko écrit dans le commentaire de cette réponse, n'oubliez pas que cela nécessite l'activation de xp_cmdshell dans la surface. configuration de la zone.

Description de TEXTCOPY:

Copie un texte ou une valeur d'image unique dans ou hors de SQL Server. La valeur est un "texte" ou une image spécifié (e) d'une seule ligne (spécifié par le "clause Where" de la 'table' spécifiée.

Si la direction est IN (/ I), les données du "fichier" spécifié sont copié dans SQL Server, en remplacement du texte ou de la valeur d'image existante. Si la direction est OUT (/ O), le texte ou la valeur de l'image est copié de SQL Server dans le 'fichier' spécifié, en remplacement de tout fichier existant.

Jetez un coup d’œil à cette question et recherchez bcp sur la page - contient un exemple d’importation et d’exportation pour varbinary (max) (qui est le nouveau type standard pour ces colonnes). vous pouvez exécuter une requête arbitraire pour l'exportation.

Comment insérer un blob dans une base de données à l'aide de SQL Server Management Studio

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top