0
我要插入一個CSV文件導入SQL的要求,但我不允許使用大容量插入功能...如何轉換CSV到一個SQL表,而「批量插入」
CSV文件包含千行,每個包含3個領域即
約翰·史密斯,23
而且我想這傳遞到一個SQL表(MSSQL2008),而不調用「批量插入」功能。該表與CSV I.e具有相同的結構,它將包含CSV列中每行的3列和一行。
有誰知道這是否可能?
我要插入一個CSV文件導入SQL的要求,但我不允許使用大容量插入功能...如何轉換CSV到一個SQL表,而「批量插入」
CSV文件包含千行,每個包含3個領域即
約翰·史密斯,23
而且我想這傳遞到一個SQL表(MSSQL2008),而不調用「批量插入」功能。該表與CSV I.e具有相同的結構,它將包含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;', ',', ';')
出於好奇,爲什麼是'BULK INSERT'禁止? – Dai
另外,請看SSMS中的「導入數據」工具。它可以從CSV文件中讀取。 – Dai
Wahat是你的堆棧限制嗎? – jcwrequests