2008-11-07 10 views
5

Potrzebuję pobrać niektóre dane BLOB z bazy danych SQL Server 2005 i wygenerować skrypt SQL, aby wstawić te same dane w innej bazie danych na innym serwerze.Kopiowanie wartości BLOB między bazami danych za pomocą czystego SQL w SQL Server

Mogę to zrobić tylko za pomocą skryptów SQL, nie mogę użyć żadnego innego narzędzia ani napisać programu w Javie lub .NET, aby to zrobić.

Drugim dużym ograniczeniem jest to, że nie mam dostępu do oryginalnej bazy danych (gdzie znajdują się oryginalne dane BLOB) podczas uruchamiania skryptu, aby skopiować dane BLOB do docelowej bazy danych, więc dane powinny być już zakodowane w pliku skryptowym SQL.

Podsumowując: czy istnieje sposób kodowania danych BLOB do tekstu, aby można go było zrzucić na polecenie SQL INSERT w pliku tekstowym skryptu i uruchomić?

W razie potrzeby mogę uruchamiać specjalne instrukcje T-SQL i procedury składowane.

Odpowiedz

2

TEXTCOPY była przykładowa aplikacja zawarte w SQL Server 7.0 i 2000, ale nie jest już dostępna w SQL Server 2005.

Jednak googlowania dla TEXTCOPY w SQL Server 2005, znalazłem tę alternatywę, która może zrobić lewy:

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

opiera się ona na piśmie i odczytu danych binarnych z systemu plików, co w moim przypadku nie jest idealna (idealnie chciałbym kodowania danych binarnych z samego SQL skryptu pliku tekstowego), ale to najlepsze, jakie udało mi się znaleźć do tej pory.

Oto kolejny dobrym źródłem, jak to zrobić binarnych operacji importu/eksportu za pomocą BULK OPENROWSET: http://msdn.microsoft.com/en-us/library/ms191184.aspx

1

Ten artykuł „Copy Text or Image into or out of SQL Server” może pomóc:

Można zintegrować narzędzie wiersza poleceń TEXTCOPY w procedurze przechowywanej:

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 

musisz zmienić/rozszerzyć je trochę w celu przeczytaj utworzony plik w innej bazie danych.

Zgodnie z komentarzem do tej odpowiedzi, należy pamiętać, że wymaga to włączenia opcji xp_cmdshell w konfiguracji powierzchni.

Opis TEXTCOPY:

Kopiuje jeden tekst lub obraz do wartości lub z SQL Server. Wartość jest określonym tekstem lub obrazem "kolumna" pojedynczego wiersza (określona przez "gdzie klauzula") określonej "tabeli".

Jeśli kierunek jest IN (/ I), następnie dane z określonego pliku „” jest kopiowane do SQL Server, zastępując istniejącą wartość tekstu lub obrazu. Jeśli kierunek jest OUT (/ O), wówczas wartość tekstu lub obrazu jest kopiowana z serwera SQL Server do określonego "pliku", zastępując dowolny istniejący plik.

+0

Wymaga to umożliwienie xp_cmdshell w konfiguracji o powierzchni –

+0

Dzięki za odpowiedź, ale nie jestem pewien, czy mam dostępu do * textcopy * użyteczności. Czyste rozwiązanie oparte na SQL jest tym, czego szukałem. – Dema

Powiązane problemy