我必须这样做:
example.txt
example.txt
使用密码.zip
.zip
文件转换为blob并存储到表中你知道如何只在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
好的我创建了这个:
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
但是当我选择此选项时出错。哪里有问题?
答案 0 :(得分:3)
对于此部分,您可以使用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
不知道如何使用t-sql完成此操作,为此我们使用powershell(或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"'
使用OPENROWSET,您可以获取BLOB数据并将其插入表中。
INSERT INTO your_table (BLOB_field)
SELECT *
FROM OPENROWSET(BULK 'c:\Folder\example.zip', SINGLE_BLOB) AS BLOB
答案 1 :(得分:2)
您可以使用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存储过程(以及演示示例)的更多信息,您可以在上找到
在SQL Server中提供CLR程序之前,您只能从批处理中调用它。