SQL Server临时表拆分字符串

时间:2013-11-27 18:39:19

标签: sql sql-server

我需要将文件读入内存并将字符串传递给存储过程。

我需要将该字符串的每一个新行拆分为临时数据库中的新行以进行处理。

是否有人有一个函数可以将每行约500字符的大字符串(1000行)转换为临时数据库。

由于

1 个答案:

答案 0 :(得分:3)

创建一个拆分函数(这个函数将处理最多约450万个字符的字符串,具体取决于SQL Server的版本):

CREATE FUNCTION [dbo].[SplitStrings_Ordered]
(
    @List       NVARCHAR(MAX),
    @Delimiter  NVARCHAR(255)
)
RETURNS TABLE
AS
    RETURN (SELECT [Index] = ROW_NUMBER() OVER (ORDER BY Number), Item 
    FROM (SELECT Number, Item = SUBSTRING(@List, Number, 
      CHARINDEX(@Delimiter, @List + @Delimiter, Number) - Number)
     FROM (SELECT ROW_NUMBER() OVER (ORDER BY s1.[object_id])
      FROM sys.all_objects AS s1 CROSS JOIN sys.all_objects AS s2) AS n(Number)
      WHERE Number <= CONVERT(INT, LEN(@List))
      AND SUBSTRING(@Delimiter + @List, Number, LEN(@Delimiter)) = @Delimiter
    ) AS y);

然后你传入字符串然后说:

SELECT LineNumber = [Index], Line = Item
INTO #temp
FROM dbo.SplitStrings_Ordered(@StringParameter, CHAR(13)+CHAR(10)) AS x;

您可能需要使用CHAR(10)CHAR(13) - 文件中存储CR / LF的方式可能因其来源而异。