我需要将 CSV 文件插入 SQL,但不允许使用批量插入功能...
CSV文件包含数千行,每行包含3个字段即
约翰·史密斯,23 岁
我想将其传递到 SQL 表(MSSQL2008)中,而不调用“批量插入”函数。该表的结构与 CSV 相同,即 CSV 中的每一行包含 3 列和一行。
有谁知道这是否可能?
我需要将 CSV 文件插入 SQL,但不允许使用批量插入功能...
CSV文件包含数千行,每行包含3个字段即
约翰·史密斯,23 岁
我想将其传递到 SQL 表(MSSQL2008)中,而不调用“批量插入”函数。该表的结构与 CSV 相同,即 CSV 中的每一行包含 3 列和一行。
有谁知道这是否可能?
CREATE FUNCTION [dbo].[Split3] (
@String nvarchar(MAX),
@SepColumn nvarchar(1),
@SepRow nvarchar(1)
)
RETURNS @T TABLE (
col1 nvarchar(50)
,col2 nvarchar(50)
,col3 nvarchar(50)
)
AS
BEGIN
DECLARE @ParseXML xml
SET @String = LTRIM(RTRIM(@String))
--Remove last row separator from string
IF RIGHT(@String, 1) = @SepRow
SET @String = LEFT(@String, LEN(@String)-1);
SELECT @ParseXML = CONVERT(XML,'<r><c>' + REPLACE(REPLACE(@String,@SepColumn,'</c><c>'),@SepRow,'</c></r><r><c>') + '</c></r>')
INSERT @T
SELECT
NULLIF(LTRIM(RTRIM(T.c.value('./c[1]','nvarchar(50)'))),'')
,NULLIF(LTRIM(RTRIM(T.c.value('./c[2]','nvarchar(50)'))),'')
,NULLIF(LTRIM(RTRIM(T.c.value('./c[3]','nvarchar(50)'))),'')
FROM @ParseXML.nodes('//r') T(c);
RETURN
END
GO
例子
SELECT * FROM [dbo].[Split3] (N'John,Smith,23;Tom,Peter,6;', ',', ';')