SQL 服务器批量将定界值插入到单个列中,拆分成列然后插入到另一个 table
SQL server bulk insert delimited values into single column, split into columns then insert into another table
我有一个只有一个字段的#tmp table。
我插入的值类似于;
2015-01-01.124587.21654#I#U#my company#ltd#brown####day
它们以“#”分隔并 \r\n 终止。
我知道,根据我正在测试的内容,我无法从 #tmp 批量插入到我的源 table。
如何快速获取这些字段?
我有一个包含 60 个文件的目录,这些文件具有 headers 和我不想要的页脚。可变行数等。所以我将它们插入到一个字段中,以避免我一直遇到关于文件意外结束等问题的持续错误。
我准备了一个游标来迭代地接收这些文件并删除头部和尾部然后插入到它们的主控 table 中并正确 headers。到目前为止,我只是处于临时 table 阶段。
我删除了文件中包含我的 headers 和页脚的行。现在我需要将这些列放入正确的 table/fields.
有什么指点吗?
编辑:使用 XML table 值函数
ALTER FUNCTION [dbo].[SplitStrings_XML]
(
@List NVARCHAR(MAX),
@Delimiter NVARCHAR(255)
)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN
(
SELECT Item = y.i.value('(./text())[1]', 'nvarchar(4000)')
FROM
(
SELECT x = CONVERT(XML, '<i>'
+ REPLACE(@List, @Delimiter, '</i><i>')
+ '</i>').query('.')
) AS a CROSS APPLY x.nodes('i') AS y(i)
);
我该如何使用它?
SELECT * FROM dbo.SplitStrings_XML(#tmp.Identifier, '#')
??
Msg 4104, Level 16, State 1, Line 48
The multi-part identifier "#tmp.Identifier" could not be bound.
我设法解决了编码和行终止符错误,因此不再需要拆分单个列。
我有一个只有一个字段的#tmp table。
我插入的值类似于;
2015-01-01.124587.21654#I#U#my company#ltd#brown####day
它们以“#”分隔并 \r\n 终止。
我知道,根据我正在测试的内容,我无法从 #tmp 批量插入到我的源 table。
如何快速获取这些字段?
我有一个包含 60 个文件的目录,这些文件具有 headers 和我不想要的页脚。可变行数等。所以我将它们插入到一个字段中,以避免我一直遇到关于文件意外结束等问题的持续错误。
我准备了一个游标来迭代地接收这些文件并删除头部和尾部然后插入到它们的主控 table 中并正确 headers。到目前为止,我只是处于临时 table 阶段。
我删除了文件中包含我的 headers 和页脚的行。现在我需要将这些列放入正确的 table/fields.
有什么指点吗?
编辑:使用 XML table 值函数
ALTER FUNCTION [dbo].[SplitStrings_XML]
(
@List NVARCHAR(MAX),
@Delimiter NVARCHAR(255)
)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN
(
SELECT Item = y.i.value('(./text())[1]', 'nvarchar(4000)')
FROM
(
SELECT x = CONVERT(XML, '<i>'
+ REPLACE(@List, @Delimiter, '</i><i>')
+ '</i>').query('.')
) AS a CROSS APPLY x.nodes('i') AS y(i)
);
我该如何使用它?
SELECT * FROM dbo.SplitStrings_XML(#tmp.Identifier, '#')
??
Msg 4104, Level 16, State 1, Line 48
The multi-part identifier "#tmp.Identifier" could not be bound.
我设法解决了编码和行终止符错误,因此不再需要拆分单个列。