- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试导入一个文本文件,因此结果将只是一列单独行中的单词。例如一段文字:
'Hello Mom,
we meet again'
应该给出 5 条记录:
'Hello'
'Mom,'
'we'
'meet'
'again'
我尝试通过 ROWTERMINATOR = ' '
的 BULK INSERT
来完成此操作,但是将 new line
视为 terminator
也是,我在其中一个结果中得到了 'Mom,we'
。
据我所知,无法将 second ROWTERMINATOR
添加到 BULK INSERT
(是吗?)。您知道实现上述结果的最佳方法是什么?
该文件不能在 SQL Server 外部进行预处理,并且该方法应该适用于数百个包含 thausands 行单词的文件,在不同时间导入,而不仅仅是一次。
最佳答案
给定:
The file cannot be preprocessed outside of SQL Server
为什么不使用 OPENROWSET(BULK...) ?这将允许您导入/插入(处理行终止符),同时拆分(处理字段终止符)。取决于您是否可以创建 Format File ,它应该类似于以下内容之一:
格式化文件 = 拆分每一行
INSERT INTO dbo.TableName (ColumnName)
SELECT split.SplitVal
FROM OPENROWSET(BULK 'path\to\file.txt',
FORMATFILE='Path\to\FormatFile.XML') data(eachrows)
CROSS APPLY SQL#.String_Split(data.eachrow, N' ', 2) split;
无格式文件 = 将整个文件拆分为一行
INSERT INTO dbo.TableName (ColumnName)
SELECT split.SplitVal
FROM OPENROWSET(BULK 'path\to\file.txt', SINGLE_CLOB) data(allrows)
CROSS APPLY SQL#.String_Split(
REPLACE(data.allrows, NCHAR(10), N' '),
N' ',
2 -- remove empty entries
) split;
注意事项:
对于这两种方法,您都需要使用字符串拆分器。基于 SQLCLR 的拆分器是最快的,在上面的示例中,我使用了 SQL# 中的一个。库(这是我创建的,但 String_Split
函数在免费版本中可用)。你也可以自己写。如果您自己编写并且不使用格式化文件,那么允许多个拆分字符可能是个好主意,这样您就可以同时传入“”和“\n”并摆脱REPLACE()
。
如果您可以编写自己的 SQLCLR 字符串拆分器,那么只编写一个接受 @FilePath
输入参数的 SQLCLR 存储过程可能会更好,读取文件,执行拆分,并吐出与单个列的行数相同的单词:
INSERT INTO dbo.TableName(ColumnName)
EXEC dbo.MySQLCLRproc(N'C:\path\to\file.txt');
如果您没有使用(或不能使用)格式文件,请务必使用正确的“SINGLE_”选项,因为您可以执行 SINGLE_CLOB
(返回 VARCHAR (MAX)
对于标准 ASCII 文件)或 SINGLE_NCLOB
(对于 Unicode 文件返回 NVARCHAR(MAX)
)。
即使您可以创建一个格式文件,可能将整个文件作为单个字符串拉入会更有效,这取决于文件的大小,因为拆分一个大文件string 可以相当快地完成,并且将是单个函数调用,而包含数千个短行的文件将是数千个函数调用,它们也很快,但可能不会比单个调用快 1000 倍。但如果文件为 1 MB 或更大,那么我可能仍会选择格式化文件并处理尽可能多的短行。
如果您所说的“预处理”是指更改,但对简单地读取它们并从 SQL Server 外部插入数据没有限制,您应该编写一个小型 .NET 应用程序来读取行,拆分行,并通过调用接受表值参数 (TVP) 的存储过程来插入数据。我在 S.O. 的另一个答案中详细介绍了这种方法:
How can I insert 10 million records in the shortest time possible?
这可以编译为控制台应用程序并在批处理(即 .CMD/.BAT)脚本中使用,甚至可以安排为 Windows 任务。
关于sql - 带有两个行终止符的 BULK INSERT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27730419/
我们在Salesforce中有批量的短信Api代码吗?我在Twilio文档中没有找到。请在相同的指南中找到。。我已经搜索了Twilio文档和谷歌它,但没有找到相同的预期结果。是否有任何相关的帖子、代码
我正在尝试使用 libusb1.0.9 实现用户空间 USB 驱动程序。我有 lpc2148 蓝板(ARM7)。这个板由 Bertrik Sikken 先生加载了开源 USB 堆栈/固件。现在我的用户
在python脚本中, 我正在尝试 elasticsearch.helpers.bulk 来存储多个记录。 我将从另一个软件中获取json格式的字符串,并将其附加到源代码部分中 我通过此answer获
我正在管道中使用附件处理器Attachment Processor。 一切正常,但是我想做多个帖子,然后尝试使用bulk API。 批量工作也很好,但是我找不到如何发送url参数“pipeline =
我正在尝试基于简单的文本文件创建批量文件夹。 os.makedir 有助于创建新文件夹,但我不确定如何将 newpath 变量与文件夹列表合并。以下是我正在尝试的。我知道代码有语法错误。因此需要一些帮
代码如下: -- Created on 2010/11/04 by WANGNAN declare -- Local variables here&nb
我想知道是否使用 BULK COLLECT INTO多个集合保证行中的相应列在嵌套表中具有相同的索引。 例子: CREATE TABLE tx AS SELECT CAST(level AS INT)
我对以下 PL/SQL BULK-COLLECT 进行了修补,它对大表 (>50.000.000) 的更新速度惊人地快。唯一的问题是,它不执行每个表剩余 < 5000 行的更新。 5000 是 FET
我正在使用 BULK INSERT导入 CSV 文件。 CSV 文件中的一列包含一些包含分数的值(例如 1m½f )。 我不需要对分数进行任何数学运算,因为这些值仅用于显示目的,所以我将列设置为 nv
以下是我尝试上载具有一百万条记录的文件时遇到的一些问题。帮助我解决问题。当我尝试在博客中找到解决方案时,所有人都建议修改一些逻辑。但是我直接使用redisgraph-bulk-loader实用程序。
我将不得不使用 SQL Server 的 BULK INSERT 命令重写一些相当旧的代码,因为架构已更改,我突然想到也许我应该考虑改用 TVP 切换到存储过程,但我想知道是什么它可能对性能产生影响。
我需要在 azure 函数中发送批量补丁请求。我已经阅读了他们关于名为“bulk( )”的函数的非常简约的文档,这就是我目前拥有的 const response = await container.i
我试图将文档批量插入索引中。我需要_id等于我要插入的特定字段。我正在使用ES v6.6 POST productv9/_bulk { "index" : { "_index" : "productv
假设我有1000个用户,每个用户有50个文档(每个文档嵌入具有名称和电子邮件的用户对象),我需要为一组用户更新名称和电子邮件。 我想使用Bulk Api,但似乎bulk API仅支持“_id”作为参数
我正在使用curl将apache日志作为文档添加到使用批量API的elasticsearch中。我发布以下内容: {"index": {"_type": "apache", "_id": "123",
我正在使用 Marklogic 8.0.6,我想知道我们是否可以批量删除。例如,我想删除 150 000 个文档,这些文档可以通过 URI 列表或通用属性(字段 COUNTRY=US 和 COLOR=
我正在使用Elasticsearch版本6.7.2,但出现错误429 { "error": { "root_cause": [ {
我是Elasticsearch的新手。 我需要使用NEST api使用批量选项插入文档。 我必须从表中索引5000个文档。以下是我用于批量索引编制的代码。 public ActionResult Cr
我正在尝试使用带有格式文件的 BULK INSERT 将 .CSV 文件导入到 SQL Server 表中。我可以导入它,但任何拉丁字符都会作为奇怪的字符导入。我为自己完成这个个人项目感到非常自豪,但
我试图找出为什么我使用的 BULK INSERT 命令无法识别该命令中使用的 FORMAT 和 FIELDQUOTE 选项。 BULK INSERT dbo.tblM2016_RAW_Current_
我是一名优秀的程序员,十分优秀!