如何在 SQL Server 中解析 CLOB 中的数据?

发布于 2024-12-26 04:59:41 字数 412 浏览 2 评论 0原文

我想使用 OPENROWSET 和 BULK 命令将数据作为 CLOB 加载到 SQL Server 中,然后作为第二步解析 CLOB 并将读取的数据作为表加载。

例如:

SELECT BulkColumn 
FROM OPENROWSET (BULK 'c:\somedir\somefile.txt', SINGLE_CLOB) TheFile

产量:

BulkColumn
Col1,Col2,Col3,1,2,3,1,2,3,1,2,3,1,2,3

我想选择它为:

Col1   Col2   Col3
1      2      3
1      2      3
1      2      3

I would like to use OPENROWSET with the BULK command to load data into SQL Server as a CLOB, and as a second step to parse the CLOB and load read the data as a table.

E.g.:

SELECT BulkColumn 
FROM OPENROWSET (BULK 'c:\somedir\somefile.txt', SINGLE_CLOB) TheFile

yields:

BulkColumn
Col1,Col2,Col3,1,2,3,1,2,3,1,2,3,1,2,3

I want to select this as:

Col1   Col2   Col3
1      2      3
1      2      3
1      2      3

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

过去的过去 2025-01-02 04:59:41

创建格式文件并使用OPENROWSET批量插入 从文本文件导入数据。
示例 format.xml:

<?xml version="1.0" ?> 
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <RECORD>
  <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="1" /> 
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="1" /> 
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="1" /> 
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="Col1" xsi:type="SQLNVARCHAR" /> 
  <COLUMN SOURCE="2" NAME="Col2" xsi:type="SQLNVARCHAR" /> 
  <COLUMN SOURCE="3" NAME="Col3" xsi:type="SQLNVARCHAR" />  
 </ROW>
</BCPFORMAT>

这是关键行:

如果数据位于单行中,则终止符字符为“,”而不是“\r\n”。

OPENROWSET 示例:

INSERT INTO [your_table]
SELECT      [text_file].[Col1],
            [text_file].[Col2],
            [text_file].[Col3]
FROM OPENROWSET(
BULK N'c:\somedir\somefile.txt',
FORMATFILE = N'c:\somedir\format.xml',
FIRSTROW = 1) AS [text_file]

BULK INSERT 示例:

BULK INSERT [your_table]
FROM        N'c:\somedir\somefile.txt'
WITH        (FORMATFILE = N'c:\somedir\format.xml')

Create a format file and use OPENROWSET or BULK INSERT to import data from text file.
Example format.xml:

<?xml version="1.0" ?> 
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <RECORD>
  <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="1" /> 
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="1" /> 
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="1" /> 
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="Col1" xsi:type="SQLNVARCHAR" /> 
  <COLUMN SOURCE="2" NAME="Col2" xsi:type="SQLNVARCHAR" /> 
  <COLUMN SOURCE="3" NAME="Col3" xsi:type="SQLNVARCHAR" />  
 </ROW>
</BCPFORMAT>

This is the key line:
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="1" />
where the terminator char is "," and not "\r\n", if the data is in a single line.

Example OPENROWSET:

INSERT INTO [your_table]
SELECT      [text_file].[Col1],
            [text_file].[Col2],
            [text_file].[Col3]
FROM OPENROWSET(
BULK N'c:\somedir\somefile.txt',
FORMATFILE = N'c:\somedir\format.xml',
FIRSTROW = 1) AS [text_file]

Example BULK INSERT:

BULK INSERT [your_table]
FROM        N'c:\somedir\somefile.txt'
WITH        (FORMATFILE = N'c:\somedir\format.xml')
幸福还没到 2025-01-02 04:59:41

不要将其导入为 OPENROWSET..BULK

您可以使用 BULK INSERT 将其导入为列或 OPENROWSET 本身

Don't import it as OPENROWSET..BULK

You can use BULK INSERT to import it as columns or OPENROWSET by itself

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文