【发布时间】:2018-07-26 18:36:13
【问题描述】:
我的数据库中有一个需要BULK INSERTed 的 CSV 文件。
实际方案是:
- 客户端生成file01.csv
- Client 将 file01.csv 移动到共享文件夹 \\SERVERNAME\Sharing 中,该文件夹指向 C:\Data在服务器
- Client 告诉数据库文件名为 file01.csv
-
服务器
BULK INSERTs C:\Data\file01.csv 进入决赛桌 -
服务器从其队列中删除 file01.csv
(稍后将被删除)
Windows 共享文件夹有一些 bug 和不稳定,所以我想让它有点不同:
- 客户端生成file01.csv
-
客户端在
VARBINARY(MAX)列中插入file01.csv -
Server 模拟 CSV 从
VARBINARY和BULK INSERTs 进入决赛桌
(不在服务器端生成任何文件)
我发现实现第二个选项的唯一方法是:
-
服务器从
VARBINARY数据生成temp.csv -
服务器
BULK INSERTs temp.csv 进入决赛桌
(稍后将被删除)
有没有办法使用VARBINARY 变量而不是BULK INSERT 中的文件?
或者如果不可能,有没有更好的方法来做到这一点?
(在 Google 上搜索了答案,只找到了如何从 CSV 文件中读取 VARBINARY 值,所以我的问题可能是重复的)
【问题讨论】:
-
如果您愿意并且能够允许客户端将 .csv 插入到具有 varbinary 列的表中,为什么不让他们将其插入到临时表或最终表中?
-
如果您有 SQL Server 2016 或更高版本,为什么不尝试使用 PolyBase,外部表可以简单地引用文件位置并在读取时应用架构?
-
@Vinnie 这是 SQL Server 2012
-
@TabAlleman 使用 BCP?我在客户端没有它
-
使用您建议使用的任何方法将 .csv 插入 varbinary。
标签: sql sql-server csv bulkinsert varbinary