我有麻烦了。我需要使用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
等等...
复制的
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列有关。
希望能有所帮助
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句