SQL Server 从表中读取 csv 二进制文件

2023-12-27

我目前将 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....'

例如,如何将该文件内容读入临时表?


如果您确实需要使用 varbinary 数据,可以将其转换回 nvarchar:

DECLARE @bin VARBINARY(MAX)
SET @bin = 0x5468697320697320612074657374

SELECT CAST(@bin as VARCHAR(MAX))
-- gives This is a test

将其转换为该格式后,您可以使用 split 函数将其转换为表格。不要问我为什么 SQL Server 中没有内置的 split 函数,因为它是一个非常明显的疏忽,但事实并非如此。因此,使用以下代码创建您自己的:

CREATE FUNCTION [dbo].[fn_splitDelimitedToTable] ( @delimiter varchar(3), @StringInput VARCHAR(8000) )
RETURNS @OutputTable TABLE ([String] VARCHAR(100), [Hierarchy] int )
AS
BEGIN

    DECLARE @String    VARCHAR(100)
    DECLARE @row int = 0

    WHILE LEN(@StringInput) > 0
    BEGIN
        SET @row = @row + 1
        SET @String      = LEFT(@StringInput, 
                                ISNULL(NULLIF(CHARINDEX(@delimiter, @StringInput) - 1, -1),
                                LEN(@StringInput)))
        SET @StringInput = SUBSTRING(@StringInput,
                                     ISNULL(NULLIF(CHARINDEX(@delimiter, @StringInput), 0),
                                     LEN(@StringInput)) + 1, LEN(@StringInput))

        INSERT INTO @OutputTable ( [String], [Hierarchy] )
        VALUES ( @String, @row )
    END

    RETURN
END

把它们放在一起:

select CAST('one,two,three' as VARBINARY)
-- gives 0x6F6E652C74776F2C7468726565

DECLARE @bin VARBINARY(MAX)
SET @bin = 0x6F6E652C74776F2C7468726565

select * from fn_splitDelimitedToTable(',', CAST(@bin as VARCHAR(MAX)))

给出这个结果:

string hierarchy
================
one    1
two    2
three  3

当然,如果您愿意,您可以将结果放入临时表中以供使用:

select * into #myTempTable
from fn_splitDelimitedToTable(',', CAST(@bin as VARCHAR(MAX)))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server 从表中读取 csv 二进制文件 的相关文章

  • MySQL 导入 125000 行 CSV 的最快方法?

    这是我第一次使用 MySQL 除了对现有数据库进行一些基本查询之外 所以我不擅长解决这个问题 我有一个包含 125 000 条记录的 CSV 我想将其加载到 MySQL 中 我安装了版本 8 和工作台 我使用导入向导加载 CSV 它开始导入
  • 使用 Meteor 中的 D3 访问 csv 文件

    我已经使用 D3 成功渲染了一个 HTML 表格 显示了 csv 文件中的数据 但是当我将相同的代码移入 Meteor 项目时 我遇到了问题 传递到 d3 csv 回调中的数据对象一次拾取 HTML 文件 1 行 而不是 csv 数据 仅当
  • 在ASP CLASSIC中使用SQL参数,对象定义不正确错误

    我试图使用参数保护我的 INSERT 语句免受 SQL 注入 但由于某种原因我收到错误 Parameter object is improperly defined Inconsistent or incomplete informatio
  • 如何在 T-SQL 中将 CSV 转换为记录集?

    在我的存储过程中 我传递一个过滤器 使用 WHERE Column IN 子句 作为参数 参数值以 CSV 形式给出 将此 CSV 转换为记录集的最佳方法是什么 例子 SELECT FROM Employee WHERE Name IN J
  • Spark SQL如何读取压缩的csv文件?

    我尝试过使用apispark read csv读取带有扩展名的压缩 csv 文件bz or gzip 有效 但在源代码中我没有找到任何可以声明的选项参数codec type 即使在这个link https github com databr
  • Id 或 [TableName]Id 作为主键/实体标识符

    是否首选使用 Id 作为主键的列名或 TableName Id 作为命名约定 表 账户主键 ID 相对 表 账户主键 AccountId 在我见过的实现中 它似乎分为 50 50 左右 每种方法的优点和缺点是什么 跟进 在我的数据库中使用一
  • 使用 WHILE 创建虚拟数据

    我尝试使用 a 在表中插入一些虚拟数据WHILE 但它运行得非常非常慢 我在想也许我写的代码不正确 你能看一下并确认一下吗 Insert dummy data DECLARE i int Content int SET i 5001 WHI
  • SQL Server freetexttable 部分单词

    我第一次使用 SQL 自由文本搜索 我有点困惑为什么它会这样 我有一个联系人表 用户可以搜索并且我正在使用 SELECT Contacts Rank FROM FREETEXTTABLE Contacts O Roarty AS Conta
  • .bat 文件将文件排序到文件夹中

    对于我的图片集 我希望文件夹中的所有图片按日期自动分类到文件夹中 幸运的是 这些文件已经以时间戳命名 2012 07 15 12 21 06 jpg 2012 07 15 12 21 26 jpg 2012 07 16 12 12 50 j
  • 使用 fgetcsv 循环遍历 csv

    我有一个包含 3 列的 csv 文件 电子邮件地址 名 and 姓 我已经到了可以使用以下代码打印数组的阶段 这会打印数组 因此每个字段都在一行中 我希望它打印的只是该行第一列中的值 这是如何完成的 关于 fgetcsv 的文档对我 相对初
  • 将大量实体插入 SQL Server 2012 [重复]

    这个问题在这里已经有答案了 我正在进行一个使用 Entity Framework 5 和 SQL Server 2012 的项目 我们需要一次插入大量行 100k 个实体的顺序 基本上 我们有一个物理程序 它输出大量二进制数据 然后我们需要
  • 连接两个表的查询的 SQL Server“FOR XML”输出

    我是 SQL Server 中 FOR XML 功能的新手 我正在使用 SQL Server 2012 我有两个表 Word 和 Word Expansion 样本数据 表 字 WordOID Word 1 PIPE 2 WIRE 表 Wo
  • SQL Server 用分隔符分割字符串

    我有一个输入字符串 100 2 3 101 2 1 103 2 3 我想解析它并将其添加到具有 3 列的表中 因此它应该是 f x col1 col2 col3 100 2 3 类似的其他数据以逗号分隔作为记录和 作为列 Thanks ni
  • Scrapy - 如何抓取网站并将数据存储在 Microsoft SQL Server 数据库中?

    我正在尝试从我们公司创建的网站中提取内容 我在 MSSQL Server 中为 Scrapy 数据创建了一个表 我还设置了 Scrapy 并配置了 Python 来抓取和提取网页数据 我的问题是 如何将Scrapy爬取的数据导出到我本地的M
  • 用 while 循环打开文件 - C [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 各位程序员大家好 我的问题不大 我不知道如何打开具有不同数字 在文件名中 的文件 从 1 到存在的任意数量的文件 例如 我有两个 或最
  • Java:如何从转义的 URL 获取文件?

    我收到了一个定位本地文件的 URL 事实上我收到的 URL 不在我的控制范围内 URL 按照 RFC2396 中的定义进行有效转义 如何将其转换为 Java File 对象 有趣的是 URL getFile 方法返回一个字符串 而不是文件
  • 在 Sql Server 中转换为日期时间 MM/dd/yyyy HH:mm:ss

    如何将给定的日期格式转换为MM dd yyyy HH mm ss 我尝试了下面这个但没有实现 谁能帮我 SELECT CONVERT VARCHAR 20 GETDATE 120 SQL Server 2005及以上版本支持 SELECT
  • 有没有办法以编程方式轻松更改多个 SSIS 包上的服务器名称?

    作为发布周期的一部分 我们正在创建多个 SSIS 包来迁移大型数据库 我们最终可能会得到大约 5 10 个 SSIS 包 由于我们有 4 个环境 开发 QA 登台 生产等 是否有一种有效的方法可以在每个 SSIS 包经历不同的服务器环境时更
  • 编辑文件名在 JComboBox 中的显示方式,同时保持对文件的访问

    我对 Java 很陌生 对堆栈溢出也很陌生 我正在尝试利用 JMF API 创建一个用 Java 编码的简单媒体播放器 到目前为止 我已经能够设置一个简单的队列 播放列表来使用JComboBox called playListHolder
  • 对多个数据库执行 SQL 查询

    我知道我的帖子与该论坛中的其他帖子的标题非常相似 但我真的找不到我需要的答案 这是我的问题 我的 Windows Server 上运行着 SQL Server 在我的 SQL Server 中 我有大约 30 个数据库 它们都具有相同的表和

随机推荐

  • Hibernate 和其他框架或规范之间有哪些差异/相似之处?

    我想知道 Hibernate 和 Java EE 5 中的简单持久性之间的区别 相似之处 我不清楚 Hibernate 是否实现了 Java EE 5 持久性实现 或者它是否是后端系统上数据表示的完全不同的方法 我对 Hibernate 及
  • 在android中设置Scrollview内的Viewpager高度

    我必须在滚动视图内显示一个视图寻呼机 寻呼机行中图像下方的图像和文本 我正在从网络下载图像 文本并显示在寻呼机行中 我将 viewpager 包装在 srollview 中以支持横向模式
  • 两种产品之间的差异最接近于零:非暴力解决方案?

    In a 挪威科学博物馆 https nordnorsk vitensenter no 我遇到了以下数学游戏 目标是放置从 0 到 9 的 10 位数字 使两种产品之间的差异最接近于零 246是目前最低分 回到家我写了以下暴力代码 impo
  • 在运行时调整 MTD 分区大小

    我正在使用嵌入式设备 并希望它们能够通过 Linux 调整 MTD 分区的大小 而无需重新启动 问题是我的 Linux 映像大小已增加 并且它所在的当前 MTD 分区 mtd0 现在太小了 但是 紧随其后的分区 mtd1 是用于存储配置信息
  • Odoo 11 在同一模型的两个不同区域添加不同的操作菜单

    在 Odoo 11 中 我想要两个具有两种不同功能的不同操作菜单 在人力资源工资单中 我想添加电子邮件工资单链接 这就是为什么我使用此代码添加电子邮件工资单操作菜单
  • solve_ivp 错误:“缺少 2 个必需的位置参数:”

    我用于solve ivp的函数定义为 def ydot t y kappa4 kappa16 使用solve ivp时如下 sol solve ivp ydot 0 10 initial condition args 50 100 我收到以
  • 如何使用 Django FileFields 在模板中显示当前文件

    我有点卡住了 我已经使用 Django 一段时间了 但我实际上似乎无法找到这个东西 这很奇怪 因为它应该是一件简单的事情 我一直在谷歌上搜索 似乎找不到解决方案 这可能是因为它很简单 问题是 我有一个 ModelForm 它有一个 File
  • Excel 工作簿的 R Download.File 问题

    我正在尝试使用 R 下载 Excel 工作簿下载文件 http stat ethz ch R manual R patched library utils html download file html功能 当我手动下载文件 使用 Inte
  • POI中如何判断文件是doc还是docx

    标题可能有点令人困惑 最简单的方法必须是通过扩展名来判断 如下所示 is represents the InputStream if filePath endsWith doc WordExtractor ex new WordExtrac
  • 显示:内联表

    IE 7 不支持display inline table 其他浏览器支持 对于替代解决方案我应该做什么 火狐和 IE8 支持display inline table IE6支持display inline table class inlin
  • 从 data.frame 到 ggplot2 图例的表达式

    我想向图例条目添加一个表达式 而不直接输入图例 因为我正在循环变量 本质上我想要这样 d lt data frame x 1 10 y 1 10 f rep c 0 74 gt 75 each 5 qplot x y data d colo
  • LoopBack:如何在代码中动态创建自定义 REST 端点(即时)

    我们使用 LoopBack REST 框架来公开我们的数据库 和业务逻辑 我们需要允许客户在数据库 单租户和多租户 中创建自定义表 这些表可以通过 REST 端点进行访问 所有客户都需要使用相同的通用 生产 REST 端点 这些端点将公开在
  • Flutter 是否支持 FieldPath?

    我找不到FieldPath in the cloud firestore颤振插件 https pub dartlang org packages cloud firestore但是 我认为这是一个非常常见的工具 将是此类插件的第一个实现之一
  • NativeScript WebView在默认浏览器中打开url

    我正在尝试构建应用程序WebView以及 WebView 内 URL 上的单击 点击事件 下面的解决方案打开外部浏览器和 URL 但它也在 webview 中加载相同的 url 内容 有没有办法阻止在 webview 中加载新的 url 这
  • 运行“npm install”时保留符号链接

    如果我们这样做 npm link x 然后我们跑npm install 它将覆盖符号链接包 有没有办法跑npm install不覆盖符号链接包 就像是 npm install preserve symlinks or npm install
  • 如何防止单击锚元素内的图像时的链接行为?

    我有一个与此类似的代码 a href link html goto link page img src images edit gif alt a 现在 如果您单击文本 我希望 href 链接能够正常工作 但是如果您单击图像 它应该执行其他
  • 在 Safari 中跳转输入字段

    我正在尝试重新创建一个非常酷的占位符用户界面 http dribbble com shots 1254439 GIF Mobile Form Interaction list users只使用 HTML 和 CSS 我就差不多明白了 dem
  • Vulkan 的 VkMemoryHeapFlagBits 是否缺少值?

    在 Vulkan 规范 1 0 9 第 180 页 中 我们有以下内容 typedef struct VkMemoryHeap VkDeviceSize size VkMemoryHeapFlags flags VkMemoryHeap 和
  • C# - 值类型的引用包装器

    我想用c Pointtype 作为引用类型 它是一个结构 我想到了上课CPoint 其中将包含一个Point成员 有什么办法可以提高会员人数吗 Point担任成员Cpoint 我正在努力避免 cpoint point X cpoint po
  • SQL Server 从表中读取 csv 二进制文件

    我目前将 csv 格式的文件存储在磁盘上 然后像这样查询它们 SELECT FROM OPENROWSET BULK C myfile csv FORMATFILE C format fmt FIRSTROW 2 AS rs 其中 form