保存.zip文件到BLOB在SQL Server
我必须这样做:保存.zip文件到BLOB在SQL Server
- 借此@HTML并保存到文件
example.txt
-
example.txt
保存到.zip
与密码 -
.zip
文件转换成团块并存储到表
你知道怎么做只有在T-SQL?可能吗?
DECLARE @HTML varchar(200)
SET @HTML = '<html>
<META http-equiv=Content-Language content=pl>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-2">
<body style="color:black; font-family: verdana, arial, helvetica, sans-serif; font-size:11px;">
TEST</body></html>'
SELECT @HTML
使用类似的东西?
EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT
EXEC sp_OASetProperty @ObjectToken, 'Type', 1
EXEC sp_OAMethod @ObjectToken, 'Open'
EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @IMG_PATH
EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, @TIMESTAMP, 2
EXEC sp_OAMethod @ObjectToken, 'Close'
EXEC sp_OADestroy @ObjectToken
OK我创造了这个:
using System;
using System.Collections.Generic;
using System.Data.SqlTypes;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using Microsoft.SqlServer.Server;
namespace SaveBlobData
{
class SaveHTML
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void SaveBlob(out SqlInt32 value, int idZak)
{
value = 3 + idZak;
}
}
}
我添加.dll
但我得到的错误,当我选择这个选项。问题在哪里?
- 参加此@HTML并保存到example.txt中
文件这部分可以使用OLE自动化对象
DECLARE @FSO int,
@oFile int,
@filename nvarchar(max) = 'c:\Folder\example.txt'
-- Create OLE Automation Object
EXEC sp_OACreate 'Scripting.FileSystemObject', @FSO OUT
-- Create file
EXEC sp_OAMethod @FSO, 'CreateTextFile', @oFile OUT, @filename, 8 , True
-- Write data
EXEC sp_OAMethod @oFile, 'Write', NULL, @HTML
-- Clear used objects
EXEC sp_OADestroy @FSO
EXEC sp_OADestroy @oFile
- 例子。 txt用密码保存到.zip
- 。zip文件转换为blob并放到表中:
不知道如何用t-sql来完成,为此我们使用p owershell(或CMD):
# path to 7-zip
$zip = "C:\Program Files\7-Zip\7z.exe"
# file
$FilesArh = "c:\Folder\example.zip"
$Dir = "c:\Folder\example.txt"
&$zip a "$FilesArh" "$Dir"
与此内部创建文件Test1.ps1
:
param
(
[String] $FilesArh,
[String] $Dir
)
# path to 7-zip
$zip = "C:\Program Files\7-Zip\7z.exe"
&$zip a "$FilesArh" "$Dir"
启动它从SQL Server:
EXEC xp_cmdshell 'powershell C:\Folder\Test.ps1 "c:\Folder\example.zip" "c:\Folder\example.txt"'
With OPENROWSET您可以获取BLOB数据并将其插入到表中。
INSERT INTO your_table (BLOB_field)
SELECT *
FROM OPENROWSET(BULK 'c:\Folder\example.zip', SINGLE_BLOB) AS BLOB
感谢非常好的回答:) –
你知道如何把密码保存到.zip文件吗? –
如果使用7-zip,则添加'-pPASSWORD',如'&$ zip a“$ FilesArh”“$ Dir”-pPASSWORD'。你可以阅读另一个选项[here](http://www.dotnetperls.com/7-zip-examples) – gofr1
您可以通过使用CLR存储过程,它允许您访问的资源被淘汰的SQL Server控制的实现这一目标。你可以用.NET编写这个程序(你可以在这个程序中做任何你想做的事情,例如读取文件,压缩它等等)。然后,您必须准备一个DLL程序集并将其与SQL Server连接。在这里,您是从MSDN的例子,如何创建一个从外部装配过程:
CREATE ASSEMBLY MyFirstUdp FROM 'C:\Programming\MyFirstUdp.dll';
CREATE PROCEDURE HelloWorld
AS EXTERNAL NAME MyFirstUdp.StoredProcedures.HelloWorld;
EXEC HelloWorld;
有关CLR的更多信息存储过程(并赠送例子),你可以在https://msdn.microsoft.com/pl-pl/library/ms131094(v=sql.110).aspx
找,直到你有你的CLR proceure可用在SQL Server中,你可以从批处理中调用它。
感谢您的时间我给你点数。 –
看起来像家庭作业:)和...'example.txt'已经存在,或者你必须通过t-sql创建它?什么将用于创建zip-archive 7-zip,winrar ...? – gofr1
我必须从@HTML中的这段文字创建example.txt –