Domanda

Devo estrarre alcuni dati BLOB da un database SQL Server 2005 e generare uno script SQL per inserire questi stessi dati in un altro database, in un altro server.

Mi è permesso farlo solo usando script SQL, non posso usare nessun'altra utility o scrivere un programma in Java o .NET per farlo.

L'altra grande restrizione che ho è che non ho accesso al database originale (dove si trovano i dati BLOB originali) quando eseguo lo script, per copiare i dati BLOB nel database di destinazione, quindi i dati dovrebbero già essere codificato nel file di script SQL.

Riassumendo: c'è un modo per codificare i dati BLOB in testo in modo da poterli scaricare in un comando SQL INSERT all'interno di un file di testo di script ed eseguirlo?

Sono in grado di eseguire istruzioni T-SQL speciali e procedure memorizzate, se necessario.

È stato utile?

Soluzione

TEXTCOPY era un'applicazione di esempio inclusa in SQL Server 7.0 e 2000 ma non più disponibile in SQL Server 2005.

Tuttavia, cercando su Google TEXTCOPY in SQL Server 2005, ho trovato questa alternativa che potrebbe fare il trucco:

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

Si basa sulla scrittura e la lettura dei dati binari dal filesystem, che nel mio caso non è l'ideale (idealmente vorrei codificare i dati binari con il file di testo dello script SQL stesso), ma è il migliore che ho trovato finora.

Ecco un'altra buona fonte su come eseguire operazioni binarie di importazione / esportazione usando BULK OPENROWSET: http://msdn.microsoft.com/en-us/library/ms191184. aspx

Altri suggerimenti

Questo articolo " Copia testo o immagine dentro o fuori SQL Server " potrebbe aiutare:

È possibile integrare lo strumento da riga di comando TEXTCOPY in una procedura memorizzata:

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

Dovrai modificarlo / estenderlo un po 'per leggere il file creato nell'altro database.

Come Vinko scrive nel commento a questa risposta, tenere presente che ciò richiede l'abilitazione di xp_cmdshell in superficie configurazione dell'area.

Descrizione di TEXTCOPY:

Copia un singolo valore di testo o immagine all'interno o all'esterno di SQL Server. Il valore è una "colonna" di testo o immagine specificata di una singola riga (specificata da " dove clausola ") della "tabella" specificata.

Se la direzione è IN (/ I), lo sono i dati dal 'file' specificato copiato in SQL Server, sostituendo il valore di testo o immagine esistente. Se la la direzione è OUT (/ O), quindi il valore del testo o dell'immagine viene copiato SQL Server nel "file" specificato, sostituendo qualsiasi file esistente.

Dai un'occhiata a questa domanda e cerca bcp nella pagina - ha un esempio sia di importazione che di esportazione per varbinary (max) (che è il nuovo tipo standard per tali colonne). puoi eseguire query arbitrarie per l'esportazione.

Come inserire un blob in un database usando sql server management studio

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top