2008-11-07 37 views
5

Tôi cần lấy một số dữ liệu BLOB từ cơ sở dữ liệu SQL Server 2005 và tạo tập lệnh SQL để chèn cùng dữ liệu này vào cơ sở dữ liệu khác.Sao chép các giá trị BLOB giữa các cơ sở dữ liệu với SQL thuần trong SQL Server

Tôi chỉ được phép thực hiện việc này bằng các tập lệnh SQL, tôi không thể sử dụng bất kỳ tiện ích nào khác hoặc viết chương trình bằng Java hoặc .NET để thực hiện.

Hạn chế lớn khác mà tôi có là tôi không có quyền truy cập vào cơ sở dữ liệu gốc (nơi dữ liệu BLOB gốc) khi tôi chạy tập lệnh, để sao chép dữ liệu BLOB vào cơ sở dữ liệu đích. đã được mã hóa trong tệp tập lệnh SQL.

Tổng hợp: có cách nào để mã hóa dữ liệu BLOB thành văn bản để tôi có thể đổ nó vào lệnh SQL INSERT trong tệp văn bản lệnh và chạy không?

Tôi có thể chạy các câu lệnh T-SQL đặc biệt và các thủ tục được lưu trữ nếu cần.

Trả lời

2

TEXTCOPY là một ứng dụng mẫu có trong SQL Server 7.0 và 2000 nhưng không còn có sẵn trong SQL Server 2005.

Tuy nhiên, googling cho TEXTCOPY trong SQL Server 2005, tôi thấy sự thay thế này có thể làm các trick:

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

nó dựa vào văn bản và đọc dữ liệu nhị phân từ hệ thống tập tin, mà trong trường hợp của tôi không phải là lý tưởng (lý tưởng tôi muốn để mã hóa dữ liệu nhị phân với các kịch bản SQL file văn bản riêng của mình), nhưng nó tốt nhất tôi đã tìm thấy cho đến nay.

Dưới đây là một nguồn tốt về cách làm các hoạt động nhập khẩu/xuất khẩu nhị phân sử dụng OPENROWSET RỜI: http://msdn.microsoft.com/en-us/library/ms191184.aspx

1

Bài viết này "Copy Text or Image into or out of SQL Server" có thể giúp:

Bạn có thể tích hợp các công cụ TEXTCOPY dòng lệnh trong một thủ tục lưu trữ:

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 

Bạn sẽ phải thay đổi/mở rộng nó một chút để đọc tệp đã tạo vào cơ sở dữ liệu khác.

Khi Vinko ghi vào nhận xét cho câu trả lời này, hãy nhớ rằng điều này yêu cầu bật xp_cmdshell trong cấu hình khu vực bề mặt.

Mô tả TEXTCOPY:

Bản sao một văn bản duy nhất hoặc giá trị hình ảnh vào hoặc ra khỏi SQL Server. Giá trị là văn bản hoặc hình ảnh được chỉ định 'cột' của một hàng duy nhất (được chỉ định bởi "trong đó điều khoản") của 'bảng' được chỉ định.

Nếu hướng là IN (/ I) sau đó các dữ liệu từ các quy định 'file' được sao chép vào SQL Server, thay thế văn bản hoặc hình ảnh giá trị hiện có. Nếu hướng là OUT (/ O) thì giá trị văn bản hoặc hình ảnh được sao chép từ SQL Server vào 'tệp' được chỉ định, thay thế bất kỳ tệp hiện có nào.

+0

này yêu cầu bật xp_cmdshell trong cấu hình diện tích bề mặt –

+0

Cám ơn câu trả lời của bạn, nhưng tôi không chắc chắn nếu tôi có quyền truy cập vào các * textcopy * tiện ích. Một giải pháp dựa trên SQL thuần túy thực sự là những gì tôi đang tìm kiếm. – Dema

Các vấn đề liên quan