2008-11-07 16 views
5

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.Copie de valeurs BLOB entre bases de données avec SQL pur dans SQL Server

Je ne suis autorisé à le faire en utilisant des scripts SQL, je ne peux pas utiliser un autre utilitaire ou écrire un programme en Java ou .NET pour le faire. L'autre grande restriction que j'ai est que je n'ai pas accès à la base de données d'origine (où sont 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, donc les données devraient déjà être codé dans le fichier de script SQL. En résumé: existe-t-il un moyen de coder les données BLOB en texte afin que je puisse le vider 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.

Répondre

2

TEXTCOPY était un exemple d'application inclus dans SQL Server 7.0 et 2000, mais ne sont plus disponibles dans SQL Server 2005.

Cependant, googler 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

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

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

1

Cet article « Copy Text or Image into or out of 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 aurez à changer/étendre un peu pour lire le fichier créé dans l'autre base de données.

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

Description TEXTCOPY:

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

Si la direction est IN (/ I), puis les données du « fichier » est spécifié copié dans SQL Server, en remplaçant le texte existant ou la valeur d'image. Si la direction est OUT (/ O), la valeur du texte ou de l'image est copiée de SQL Server dans le 'fichier' spécifié, en remplacement de tout fichier existant.

+0

Cela requiert l'activation xp_cmdshell dans la configuration de surface –

+0

Merci pour votre réponse, mais je ne suis pas sûr d'avoir accès au * textcopy * utilitaire. Une solution purement basée sur SQL est vraiment ce que je cherchais. – Dema