首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从客户端机器SQL Server 2019读写文件

如何从客户端机器SQL Server 2019读写文件
EN

Database Administration用户
提问于 2021-02-22 12:34:35
回答 3查看 1.1K关注 0票数 1

我需要准备一个存储过程,它导出的文件和我在模式中拥有的表一样多,但是文件需要在特定路径(例如C:\Temp\ not在Server目的地上)上的本地机器上写入。当文件存在时,它应该被覆盖,如果不是简单创建的话。我还需要从本地文件读取:参数和模板,这将在过程中使用。除了读/写文件的方法之外,我什么都知道。

我找到了一些导出文件的想法:

  1. 执行bcp命令的xp_cmdshell只能在SQLServer2019机器上写入文件。
  2. 我还发现了sp_configure 'Ole自动化程序‘,1;
代码语言:javascript
复制
    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

你知道更简单的方法来实现这一点吗?

EN

回答 3

Database Administration用户

发布于 2021-02-22 15:58:14

我想在J.D的文章中强调第三点。如果有可能的话,这是您绝对希望在Server之外执行的事情。

“Server之外”可能是一些东西,比如SSIS、Powershell、用您最喜欢的编程语言(C#、python)编写的东西、一些客户端应用程序等等。

票数 1
EN

Database Administration用户

发布于 2021-02-22 13:00:54

Server实例除了自己的计算机外,没有其他机器的概念。当您使用SSMS (或其他方式)连接到它时,您将具体地启动到该服务器的连接,而不是相反。因此,我不相信有一种用纯SQL来实现这一目标的方法。

下面是几个关于你能做什么的想法:

  1. xp_cmdshell本质上是在运行server实例的服务器上执行命令的一种方法。如果您可以从server实例首先运行的服务器向本地计算机设置一个文件共享,那么您可能可以利用xp_cmdshell将文件写入该共享。
  2. CLR可能是另一种解决方案,您可以使用它创建一个过程,将数据从服务器传输到访问本地机器的web服务。然后,该web服务可以使用C#代码(实际上是您选择的任何支持web服务的代码)轻松地将文件写入本地机器。
  3. 最后,但肯定不是最不重要的(可能是最标准的方法)是SSIS。您可以创建一个SSIS包,该包导出您的数据,然后将实际的文件写入您的本地机器(尽管您可能需要在包中添加本地机器作为连接)。
票数 0
EN

Database Administration用户

发布于 2021-06-25 00:07:04

我同意以前的观点。我想加入作为一种选择。甚至SQL Express。

这一切都取决于你正在努力实现的目标。你为什么要这么做?因为除非您有很好的理由这样做,否则这违背了拥有数据库的共同原则和优势。

作为中间步骤,导出到文本、xml或csv似乎是最简单的选择,但很少是这样。

  • 如果您正在迁移,有更好的方法。
  • 如果你是在报告,有更好的方法。
  • 如果您正在构建一个应用程序,有更好的方法。
  • 如果您想要版本控制,有更好的方法。

你的最终目标是什么?我打赌钱有一个更好的选择,输出到文本或.csv。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/285797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档