我有一个要求将文件读入内存并将字符串传递到存储过程。SQL Server临时表拆分字符串
我需要将该字符串的每个新行分割成临时数据库中的新行进行处理。
有没有人有一个功能,将一个大字符串(1000行)每行约500个字符转换成临时数据库。
感谢
我有一个要求将文件读入内存并将字符串传递到存储过程。SQL Server临时表拆分字符串
我需要将该字符串的每个新行分割成临时数据库中的新行进行处理。
有没有人有一个功能,将一个大字符串(1000行)每行约500个字符转换成临时数据库。
感谢
创建分割功能(此人会处理字符串高达约4.5万字,这取决于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存储在文件可能取决于在他们来自哪里。
我几乎空的数据库在'sys.all_objects'中有大约2000条记录。在所有情况下都足够了吗? – Szymon
如果您的文本文件有<= 4,000,000个字符(2,000^2),是。如果你的字符串有可能超过4,000,000个字符,那么你可以使用'sys.all_columns'来代替(在一个地方或两个地方)。这将支持大约71,000,000个字符。如果还不够,请停止尝试在SQL Server中拆分这些字符串。即使是4,000,000应该从外部处理(C#将比SQL Server更有效率)。 –
字符串是怎样的? – DevelopmentIsMyPassion
字符串是一个较少的文件,这是有点困难。无论如何,我需要逃避文本中的单引号,以确保它正常运行。我使用了类似于以下功能的东西。 – user1619480