복붙노트

[SQL] INSERT INTO TABLE은 쉼표에서 VARCHAR 목록을 분리

SQL

INSERT INTO TABLE은 쉼표에서 VARCHAR 목록을 분리

어쩌면 내가 나무에 대한 나무를 보이지 않아요하지만 난 갇혀있어, 그래서 여기에 질문입니다 :

어떻게 내가 쉼표의 목록을 테이블에 VARCHAR-값을 분리 삽입 / 가져올 수 있습니까? 나는이 같은 것을 의미하지 않는다 :

, 그렇지 나는 분할 기능을 가지고 있지만,이 경우에 쓸모없는 것 같다?

여기에 내가 무슨 뜻인지 보여줄 수있는 간단한 (모의-SQL) 예입니다 :

Create Table #IMEIS(
    imei varchar(15)
)
INTO INTO #IMEIS(imei)
    SELECT * FROM ('012251000362843', '012251001084784', '012251001168744', '012273007269862', '012291000080227', '012291000383084', '012291000448515')
SELECT * from #IMEIS
DROP TABLE #IMEIS;

사전에 감사합니다.

해결법

  1. ==============================

    1.그냥이 "으로 VARCHAR의 쉼표로 구분 된 목록"을 통과 할 수있는 방법이 없기 때문에, 나는 다른 시스템을 생성하는 가정합니다. 당신은 약간 발전기를 수정할 수 있다면, 가능한해야합니다. 오히려 쉼표로 분리보다는, 모든 선택 조합에 의해 분리하고, 필요 목록에 또한 선택 앞에 추가합니다. 마지막으로, 당신은 당신의 테이블 및 열 별칭 부속을 제공해야합니다 :

    그냥이 "으로 VARCHAR의 쉼표로 구분 된 목록"을 통과 할 수있는 방법이 없기 때문에, 나는 다른 시스템을 생성하는 가정합니다. 당신은 약간 발전기를 수정할 수 있다면, 가능한해야합니다. 오히려 쉼표로 분리보다는, 모든 선택 조합에 의해 분리하고, 필요 목록에 또한 선택 앞에 추가합니다. 마지막으로, 당신은 당신의 테이블 및 열 별칭 부속을 제공해야합니다 :

    Create Table #IMEIS(
        imei varchar(15)
    )
    INSERT INTO #IMEIS(imei)
        SELECT * FROM (select '012251000362843' union all select '012251001084784' union all select '012251001168744' union all
                       select '012273007269862' union all select '012291000080227' union all select '012291000383084' union all
                       select '012291000448515') t(Col)
    SELECT * from #IMEIS
    DROP TABLE #IMEIS;
    

    그러나 추가 5000 명 엔트리를하는 것에 대한 다른 대답에 귀하의 코멘트에 주목. 나는 당신이 여전히 별도의 문으로 이러한 값 중 일부 분할을 수행해야하므로 선택 제한 당 256 개 테이블, "노조 모두"위의와 패턴을 걷어차 수 있습니다 생각합니다.

  2. ==============================

    2.이런 식으로 뭔가 작업을해야합니다 :

    이런 식으로 뭔가 작업을해야합니다 :

    INSERT INTO #IMEIS (imei) VALUES ('val1'), ('val2'), ...
    

    최신 정보:

    분명히이 구문은 SQL 서버 2008에서만 사용할 수 있습니다 시작합니다.

  3. ==============================

    3.SQL Server는 (내 지식을)하지 않는에서 빌드 분할 기능을 가지고있다. 모든 플랫폼에서 일반적으로 분할 기능은 각각의 문자열로 분할 쉼표로 구분 된 문자열 값을 가질 것이다. SQL 서버, 분할 기능의 주요 목적이나 필요한 행 각 문자열 임시 테이블에 ( 'ABC, CDE, FGH ") 쉼표로 구분 된 문자열 값을 변환한다.

    SQL Server는 (내 지식을)하지 않는에서 빌드 분할 기능을 가지고있다. 모든 플랫폼에서 일반적으로 분할 기능은 각각의 문자열로 분할 쉼표로 구분 된 문자열 값을 가질 것이다. SQL 서버, 분할 기능의 주요 목적이나 필요한 행 각 문자열 임시 테이블에 ( 'ABC, CDE, FGH ") 쉼표로 구분 된 문자열 값을 변환한다.

    분할 기능 아래는 우리에게 개별 문자열로 분할 쉼표로 구분 된 (또는 다른 구분 값) 문자열을 도움이 될 테이블 반환 함수입니다.

    CREATE FUNCTION dbo.Split(@String varchar(8000), @Delimiter char(1))       
    returns @temptable TABLE (items varchar(8000))       
    as       
    begin       
        declare @idx int       
        declare @slice varchar(8000)       
    
        select @idx = 1       
            if len(@String)<1 or @String is null  return       
    
        while @idx!= 0       
        begin       
            set @idx = charindex(@Delimiter,@String)       
            if @idx!=0       
                set @slice = left(@String,@idx - 1)       
            else       
                set @slice = @String       
    
            if(len(@slice)>0)  
                insert into @temptable(Items) values(@slice)       
    
            set @String = right(@String,len(@String) - @idx)       
            if len(@String) = 0 break       
        end   
    return       
    end  
    

    dbo.split에서 상위 10 *를 선택 ( '첸나이, 방갈로르, 뭄바이', '')

    전체는 follownig 링크에서 확인하실 수 있습니다 http://www.logiclabz.com/sql-server/split-function-in-sql-server-to-break-comma-separated-strings-into-table.aspx

  4. from https://stackoverflow.com/questions/6354742/insert-into-table-from-comma-separated-varchar-list by cc-by-sa and MIT license