>
-- Given a CSV string like this:
declare @roles varchar(800)
select  @roles = 'Pub,RegUser,ServiceAdmin'
-- Question: How to get roles into a table view like this:
select  'Pub'
union
select  'RegUser'
union
select  'ServiceAdmin'

<시간>

이 글을 게시 한 후 동적 SQL로 게임을 시작했습니다. 이것은 작동하는 것처럼 보이지만 동적 SQL을 사용하면 보안 위험이있을 수 있습니다. 이것에 대해 생각하십니까?

declare @rolesSql varchar(800)
select  @rolesSql = 'select ''' + replace(@roles, ',', ''' union select ''') + ''''
exec(@rolesSql)


  • 답변 # 1

    여기에서 내 대답보기

    그러나 기본적으로 당신은 :

    DB에서이 함수를 생성하십시오 :

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

    그런 다음 함수를 호출하고 분할하려는 문자열을 전달하십시오.

    Select * From dbo.Split(@roles, ',')
    
    

  • 답변 # 2

    SQL Server 호환성 수준 130을 사용하는 경우 STRING_SPLIT 기능이 현재 가장 간결한 방법입니다.

    참조 링크 : https://msdn.microsoft.com/en-gb/library/mt684588.aspx

    사용법 :

    SELECT * FROM string_split('Pub,RegUser,ServiceAdmin',',')
    RESULT:
    value
    -----------
    Pub
    RegUser
    ServiceAdmin
    
    

  • 답변 # 3

    옵션에 대한 자세한 설명은 다음과 같습니다.

    SQL Server의 배열 및 목록

  • 답변 # 4

    SQL Server의 기본 제공 XML 구문 분석을 사용하는 것도 옵션입니다. 물론 이것은 RFC-4180 호환 CSV의 모든 미묘한 차이를 반영합니다.

    -- Given a CSV string like this:
    declare @roles varchar(800)
    select  @roles = 'Pub,RegUser,ServiceAdmin'
    -- Here's the XML way
    select split.csv.value('.', 'varchar(100)') as value
    from (
         select cast('<x>' + replace(@roles, ',', '</x><x>') + '</x>' as xml) as data
    ) as csv
    cross apply data.nodes('/x') as split(csv)
    
    

    string_split 를 사용하여 SQL 2016+를 사용하는 경우  더 나은 방법이지만 SQL 2016 이전에이 작업을 수행하는 일반적인 방법입니다.

  • 답변 # 5

    BULK INSERT를 사용하면 csv 파일을 SQL 테이블로 가져올 수 있습니다-

    http://blog.sqlauthority.com/2008/02/06/sql-server-import-csv-file-into-sql-server-using-bulk-insert-load-comma-delimited-file-into -sql-server/

  • 이전 c# - Visual Studio 2010에서 손상된 csproj 파일을 어떻게 복구 할 수 있습니까?
  • 다음 python - while 루프 원 라이너