파일을 메모리로 읽어와 문자열을 저장 프로 시저에 전달해야합니다.SQL Server 임시 테이블 분할 문자열
임시 데이터베이스에서 해당 문자열의 각 줄을 새 행으로 분할하여 처리해야합니다.
약 500 자의 큰 문자열 (1000 줄)을 임시 데이터베이스로 변환하는 기능을 가진 사람이 있습니까?
감사
파일을 메모리로 읽어와 문자열을 저장 프로 시저에 전달해야합니다.SQL Server 임시 테이블 분할 문자열
임시 데이터베이스에서 해당 문자열의 각 줄을 새 행으로 분할하여 처리해야합니다.
약 500 자의 큰 문자열 (1000 줄)을 임시 데이터베이스로 변환하는 기능을 가진 사람이 있습니까?
감사
분할 기능 (약 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가에 따라 달라질 수 있습니다 파일에 저장하는 방법 그들이 어디서 왔는지.
거의 빈 데이터베이스에는'sys.all_objects'에 약 2000 개의 레코드가 있습니다. 모든 경우에 충분합니까? – Szymon
텍스트 파일에 <= 4,000,000 자 (2,000^2)가 있으면 예. 문자열이 4,000,000자를 초과 할 가능성이 있다면 대신 (한 자리에서 또는 두 곳에서)'sys.all_columns '를 사용할 수 있습니다. 최대 약 7 천 1 백만자를 지원합니다. 그래도 충분하지 않다면 SQL Server에서 이러한 문자열을 분리하려고 시도하지 마십시오. 4,000,000조차도 외부에서 처리해야합니다 (C#은 SQL Server보다 훨씬 효율적입니다). –
문자열의 모양은 어떻습니까? – DevelopmentIsMyPassion
문자열이 적은 파일로 약간 어렵습니다. 어쨌든 텍스트에서 작은 따옴표를 벗어나 확인을 위해 필요한 조치를 취했습니다. 나는 아래 함수와 비슷한 것을 사용했다. – user1619480