gpt4 book ai didi

sql-server - 当我使用 sp_OAMethod 写入文本文件时,没有任何显示

转载 作者:行者123 更新时间:2023-12-01 10:34:38 24 4
gpt4 key购买 nike

我正在尝试使用可以将输入传递给的存储过程使用 Transact-SQL 写入文件。但是,每次我在 SQL Server 2012 中运行命令时,它都会显示 Command(s) completed successfully. ,但我导航到文本文件,但在那里看不到任何文本。知道可能出了什么问题吗?

我的代码:

-- 授予 OLE 自动化权限 --
sp_configure '显示高级选项', 1;

重新配置;

sp_configure 'Ole 自动化程序', 1;

重新配置;


DROP PROC WriteToGSQL;

-- 封装对文本文件进行实际写入的特定代码 --
设置 ANSI_NULLS ON

设置 QUOTED_IDENTIFIER ON

创建过程 [dbo].[WriteToGSQL]

@Path VARCHAR(2000),
@Text VARCHAR(2000)

作为

开始

声明@Auto INT
声明@FileID INT

EXECUTE sp_OACreate 'Scripting.FileSystemObject', @Auto OUT
执行 sp_OAMethod @Auto, 'OpenTextFile', @FileID OUT, @Path, 8, 1
EXECUTE sp_OAMethod @FileID, 'WriteLine', Null, @Text
执行 sp_OADestroy @FileID
EXECUTE sp_OADestroy @Auto

结尾

声明@File VARCHAR(2000);
声明@Txt VARCHAR(2000);

SET @File = 'C:\xxxxxxxx\xxxx\test.txt';
SET @Txt = '成功了吗?';

EXEC WriteToGSQL @File, @Txt;

最佳答案

@JeroenMostert 为您指明了正确的方向,值得称赞,我只是将他的话放入 SQL 中以帮助您(而且我在没有 SSMS 的情况下这样做,因此您可能需要稍微调整一下)。

要重新迭代 Jeroen 的观点,您需要通过检查返回值来确保每个 sp_OA... 调用都有效,并且您需要在销毁对象之前调用文件的 Close 方法。查看 FileSystemObject 的 MSDN 文档进一步的想法。

DECLARE @hr int; 

EXECUTE @hr = sp_OACreate 'Scripting.FileSystemObject', @Auto OUT
IF @hr <> 0
BEGIN
RAISERROR('Error %d creating object.', 16, 1, @hr)
RETURN
END

EXECUTE @hr = sp_OAMethod @Auto, 'OpenTextFile', @FileID OUT, @Path, 8, 1
IF @hr <> 0
BEGIN
RAISERROR('Error %d opening file.', 16, 1, @hr)
RETURN
END

EXECUTE @hr = sp_OAMethod @FileID, 'WriteLine', Null, @Text
IF @hr <> 0
BEGIN
RAISERROR('Error %d writing line.', 16, 1, @hr)
RETURN
END

EXECUTE @hr = sp_OAMethod @FileID, 'Close', Null, Null
IF @hr <> 0
BEGIN
RAISERROR('Error %d closing file.', 16, 1, @hr)
RETURN
END

EXECUTE @hr = sp_OADestroy @FileID
EXECUTE @hr = sp_OADestroy @Auto

关于sql-server - 当我使用 sp_OAMethod 写入文本文件时,没有任何显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37884131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com