我需要将文件读取到内存中,并将字符串传递到存储过程中。
我需要在临时数据库中将该字符串的每一行拆分为一个新行以进行处理。
有没有人有一个函数可以将每行大约500个字符的一个大字符串(1000行)转换为临时数据库。
感谢
创建一个拆分函数(根据SQL Server的版本,这个函数最多可以处理450万个字符的字符串):
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在文件中的存储方式可能因它们的来源而异。