我需要准备一个存储过程,它导出的文件和我在模式中拥有的表一样多,但是文件需要在特定路径(例如C:\Temp\ not在Server目的地上)上的本地机器上写入。当文件存在时,它应该被覆盖,如果不是简单创建的话。我还需要从本地文件读取:参数和模板,这将在过程中使用。除了读/写文件的方法之外,我什么都知道。
我找到了一些导出文件的想法:
DECLARE @OLE INT
DECLARE @FileID INT
EXECUTE sp_OACreate 'Scripting.FileSystemObject', @OLE OUT
EXECUTE sp_OAMethod @OLE, 'OpenTextFile', @FileID OUT, 'D:\data\sqltotext.text', 8, 1
EXECUTE sp_OAMethod @FileID, 'WriteLine', Null, 'Today is wonderful day'
EXECUTE sp_OADestroy @FileID
EXECUTE sp_OADestroy @OLE
GO你知道更简单的方法来实现这一点吗?
发布于 2021-02-22 15:58:14
我想在J.D的文章中强调第三点。如果有可能的话,这是您绝对希望在Server之外执行的事情。
“Server之外”可能是一些东西,比如SSIS、Powershell、用您最喜欢的编程语言(C#、python)编写的东西、一些客户端应用程序等等。
发布于 2021-02-22 13:00:54
Server实例除了自己的计算机外,没有其他机器的概念。当您使用SSMS (或其他方式)连接到它时,您将具体地启动到该服务器的连接,而不是相反。因此,我不相信有一种用纯SQL来实现这一目标的方法。
下面是几个关于你能做什么的想法:
xp_cmdshell本质上是在运行server实例的服务器上执行命令的一种方法。如果您可以从server实例首先运行的服务器向本地计算机设置一个文件共享,那么您可能可以利用xp_cmdshell将文件写入该共享。发布于 2021-06-25 00:07:04
我同意以前的观点。我想加入作为一种选择。甚至SQL Express。
这一切都取决于你正在努力实现的目标。你为什么要这么做?因为除非您有很好的理由这样做,否则这违背了拥有数据库的共同原则和优势。
作为中间步骤,导出到文本、xml或csv似乎是最简单的选择,但很少是这样。
你的最终目标是什么?我打赌钱有一个更好的选择,输出到文本或.csv。
https://dba.stackexchange.com/questions/285797
复制相似问题