2014-11-21 35 views
0

我遇到了麻煩。我需要使用T-sql將文件從一臺服務器複製到另一臺服務器。格式是可變的(pdf,xlsx,doc,jpg),但通常是excel .xlsx。使用t-sql將文件從服務器複製到另一個

現在我的解決方案是在源服務器上將varbinary數據中的文件轉換並將其作爲參數傳遞給位於目標服務器上的存儲過程。

在源服務器的代碼:

DECLARE @temp table(data varbinary (max)) 
DECLARE @out varbinary(max) 

INSERT INTO @temp(data) 
SELECT * FROM OPENROWSET(BULK N'C:\original.xlsx', SINGLE_BLOB) as data 

SELECT @out=data FROM @temp 
EXEC DEST_SERVER.copy @out 

(我知道,代碼是醜陋的和多餘的,但到目前爲止進展順利)

目標服務器上的代碼是:

CREATE PROCEDURE copy @in varbinary(max) 
AS 
BEGIN 
    CREATE TABLE ##temp(data varbinary(max)) 
    insert into ##temp(data) values(@in) 
    declare @SQLcommand varchar(1000) 
    set @SQLcommand = 'bcp "SELECT data FROM ##temp" queryout "C:\copied.xlsx" -T -S ' + @@SERVERNAME + ' -n' 
    exec xp_cmdshell @SQLcommand 
    DROP TABLE ##temp 
END 

當程序工作在目標服務器上創建新文件時,但兩個文件略有不同。

具體來說,新的文件在開頭幾個位,其他一切都是相同的:

original.xlsx

50 4B 03 04 14 00 06 00

08 00 00 00 21 00 A7 95

F9 99 84 01 00 00 14 06

00 00 13 00 DD 01 43 5B

6F 6E 74 65 6E 74 54 5F

等...

copied.xlsx

4F 32 00 00 00 00 00 00 - >這個字節是新

50 4B 03 04 14 00 06 00

08 00 00 00 21 00 A7 95

F9 99 84 01 00 00 14 06

00 00 13 00 DD 01 43 5B

6F 6E 74 65 6E 74 54 5F

等...

我做錯了什麼?,

回答

1

這篇文章中的人有同樣的問題。 他通過使用bcp命令指定格式文件來修復它。 我認爲這可能也是你的問題。 看起來它可能與bcp和varbinary列有關。

SQL Server BCP export corrupted file?

希望幫助

+0

非常感謝你。我想避開bcp,但在你的幫助下,問題解決了,我必須使用它。再次感謝。 – Rodrigo 2014-12-22 00:43:50

+0

如果是這樣的話,你認爲xp_cmdshell只是做一個文件拷貝? – Spock 2014-12-22 04:49:29

相關問題