我有一个接收@Data
image
参数的存储过程。
我想把它从存储过程保存到文件系统。
你知道怎么做吗?
您可以使用OLE自动化(ADODB.Stream)从SQL Server 2000存储过程写入二进制数据,如这里和这里所述。下面的示例使用varbinary变量,但它应该与您的image参数类似。
DECLARE @Path VarChar(255)
DECLARE @Data VarBinary(1000)
SET @Data = 0x12345678
SET @Path = 'c:test.dat'
DECLARE @object Integer
DECLARE @hr Integer
-- create the ADO stream object
EXEC @hr = sp_oacreate 'ADODB.Stream', @object OUTPUT, 1
IF (@hr <> 0)
RAISERROR('ADO stream creation failed', 11, 0)
-- configure it for binary access
EXEC @hr = sp_oasetproperty @object, 'Type', 1
IF (@hr <> 0)
RAISERROR('Failed to set stream type', 11, 0)
-- open the stream
EXEC @hr = sp_oamethod @object, 'Open'
IF (@hr <> 0)
RAISERROR('Failed to open the stream object', 11, 0)
-- write the buffer to the stream
EXEC @hr = sp_oamethod @object, 'Write', NULL, @Data
IF (@hr <> 0)
RAISERROR('Failed to write a buffer to the stream', 11, 0)
-- save the stream to a file with overwrite
EXEC @hr = sp_oamethod @object, 'SaveToFile', NULL, @Path, 2
IF (@hr <> 0)
RAISERROR('Failed to save the stream to a file', 11, 0)
-- cleanup
EXEC sp_oadestroy @object
请注意,通过此方法(以及我所知道的SQL2000中的所有其他方法)访问文件系统将在SQL Server进程的安全上下文中进行,而不是在存储过程的调用方下进行。
如果你不习惯将ADO组件加载到SQL Server进程中,你可以考虑实现一个扩展的存储过程来写入你的文件。