2011-05-10 3 views
2

한 열에서 데이터 문자열을 가져 와서 SQL Ser 2008에서 여러 개의 다른 열로 나누려고합니다. 예제 : 이름 계정 445566 0010020056893010445478008 AFD 369. 빌린 공간 구분 된 분할 기능은 훌륭합니다. 문제는 T-SQL을 처음 사용하고 몇 가지 질문이 있다는 것입니다.SQL Server 2008 T-SQL UDF 확률 및 종료

  1. 문자열 리터럴뿐만 아니라 전체 테이블을 통해 함수를 실행하려면 어떻게해야합니까?

  2. 이렇게하면 이러한 값을 가져 와서 내 테이블에 삽입하는 임시 테이블이 생성됩니까? 삽입 진술일까요? 여기

는 스크립트 및 사용 : 테이블에 대해 UDF 상당의 테이블을 사용하려면

CREATE FUNCTION [dbo].[Split] 
( 
@String varchar(max) 
,@Delimiter char 
) 
RETURNS @Results table 
( 
Ordinal int 
,StringValue varchar(max) 
) 
as 
begin 

set @String = isnull(@String,'') 
set @Delimiter = isnull(@Delimiter,'') 

declare 
@TempString varchar(max) = @String 
,@Ordinal int = 0 
,@CharIndex int = 0 

set @CharIndex = charindex(@Delimiter, @TempString) 
while @CharIndex != 0 begin  
    set @Ordinal += 1   
    insert @Results values 
    ( 
    @Ordinal 
    ,substring(@TempString, 0, @CharIndex) 
    )   
    set @TempString = substring(@TempString, @CharIndex + 1, len(@TempString) - @CharIndex)  
    set @CharIndex = charindex(@Delimiter, @TempString) 
end 

if @TempString != '' begin 
    set @Ordinal += 1 
    insert @Results values 
    ( 
    @Ordinal 
    ,@TempString 
    ) 
end 

return 
end 

--USAGE 
select 
s.* 
from dbo.Split('Name Account 445566 0010020056893010445478008 AFD 369', ' ') as s 
where rtrim(s.StringValue) != '' 
GO 

답변

1

, 당신은 CROSS APPLY 필요 (또는 어쩌면 OUTER없이 행 "당신이 처리하는 방법에 따라 적용 "udf로부터). 이

INSERT AnotherTable (col1, col2, ...) 
SELECT 
    col1, col2, ... 
FROM 
    mytable M 
    CROSS APPLY 
    [dbo].[Split] (M.TheColumn) S 
+0

니스를 삽입 자체가 테이블

SELECT * FROM mytable M CROSS APPLY [dbo].[Split] (M.TheColumn) S 

당신의 테이블에 대해 UDF의 행 단위 작업을 적용! 나는 그것을 시도 할 것이다. 나는 거기에서 잠깐 스택을 할 수있을 거라 생각했다. 도와 주셔서 감사합니다! – 2boolORNOT2bool

+0

좋지만 오류가 하나 있습니다. 프로 시저 또는 함수 dbo.Split에 제공된 인수 수가 충분하지 않습니다. – 2boolORNOT2bool

+0

아, 죄송합니다. 구분 기호를 두 번째 매개 변수로 추가해야합니다. – gbn