簡體   English   中英

使用t-sql將文件從服務器復制到另一個

[英]copy files from server to another with t-sql

我有麻煩了。 我需要使用T-sql將文件從一台服務器復制到另一台服務器。 格式是可變的(pdf,xlsx,doc,jpg),但通常為excel .xlsx。

現在,我的解決方案是在源服務器上將文件轉換為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 5B 43

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

等等...

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 5B 43

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

等等...

我究竟做錯了什么 ?,

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

SQL Server BCP導出損壞的文件?

希望能有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM