【发布时间】:2014-07-04 22:30:03
【问题描述】:
我目前将我的 csv 格式文件存储在磁盘上,然后像这样查询它们:
SELECT *
FROM OPENROWSET(BULK 'C:\myfile.csv',
FORMATFILE = 'C\format.fmt',
FIRSTROW = 2) AS rs
其中 format.fmt 是 csv 文件中列的定义格式。这很好用。 但我有兴趣将文件存储在 SQL Server 表中,而不是将它们存储在磁盘上。 因此,当具有 VARBINARY(MAX) 数据类型列时。如何查询它们?
如果我有这样的表:
CREATE TABLE FileTable
(
[FileName] NVARCHAR(256)
,[File] VARBINARY(MAX)
)
一行'myfile.csv', '0x427574696B3B44616....'
例如,如何将该文件内容读入临时表?
【问题讨论】:
-
如果您有 CSV 数据,为什么不直接将其导入数据库?
-
我不完全关注。是的,我得到了 CSV 数据,因为用户上传了包含该数据的文件。因此,我可以将其存储在 NVARCHAR(MAX) 列中,而不是将数据存储为二进制文件:
'value1;value2;value3\r\nvalue4;value5;value6\r\n'。这可能是一个简单的问题,但是如何在不编写大量自定义代码的情况下解析该列? -
如果您有 CSV 数据,那么将其放入数据库并直接使用它是一件简单的事情,而不是绕着房子试图使用文件中的数据。这里有一个指南:blog.sqlauthority.com/2011/05/12/…
-
因为无论如何我都需要将它存储在数据库中,因为我需要备份原始数据,而对我来说最好的选择是将它存储在它所属的表中的数据库中,我的想法是将其存储在磁盘上只是为了能够将其导入另一张桌子是“绕着房子走”。这将临时保存到磁盘,导入它然后删除磁盘上的文件。如果我可以直接从它已经存在的列中导入它,对我来说似乎没有必要。这就是我问题的重点。我能否避免保存到磁盘并直接从表中读取它。
-
说真的,除非您没有告诉我们有关您的设置的某些内容,否则您的看法完全错误。您可以非常轻松地将数据库中的文件作为数据库表进行备份。使用这种格式比尝试转换为 VARBINARY 并再次返回要容易得多。
标签: sql-server file csv blob