> 데이터 베이스 > MySQL 튜토리얼 > master..spt_values가 SQL Server에서 쉼표로 구분된 값을 어떻게 효율적으로 분할할 수 있습니까?

master..spt_values가 SQL Server에서 쉼표로 구분된 값을 어떻게 효율적으로 분할할 수 있습니까?

Susan Sarandon
풀어 주다: 2024-12-30 14:20:11
원래의
560명이 탐색했습니다.

How Can master..spt_values Efficiently Split Comma-Separated Values in SQL Server?

master..spt_values를 사용하여 열 분할

배경: 조회 테이블 및 투영

Master..spt_values는 Microsoft SQL Server의 시스템 테이블로, 시스템 저장 프로시저에서 사용되는 다양한 조회 및 프로젝션 테이블이 포함되어 있습니다. 사전 정의된 숫자 시퀀스, 비트마스크 및 기타 일반적으로 필요한 값을 제공하여 효율적인 데이터 조작이 가능합니다.

조회 테이블을 사용하면 잠금 유형을 숫자에서 이름으로 변환하는 등 숫자 값을 해당 문자열 표현으로 확장할 수 있습니다. . 반면에 프로젝션 테이블은 값 범위를 반복하는 방법을 제공하므로 열을 여러 행으로 분할하는 데 유용합니다.

Type = "P": 프로젝션 테이블

master..spt_values에 "P"를 입력하면 프로젝션 테이블을 나타냅니다. 0부터 2047까지의 일련의 연속 숫자가 포함되어 있습니다. 이 테이블을 사용하면 효율적인 프로젝션이 가능합니다. 계산 또는 집계와 같은 다양한 작업을 통해 값 집합을 생성합니다.

열 분할에 "P" 유형을 사용할 때의 이점

master..spt_values(유형 CSV 열을 분할하는 "P")는 성능과 효율성에 있습니다. 미리 계산된 숫자 시퀀스를 활용하면 SQL Server에서는 시퀀스가 ​​동적으로 생성된 경우 필요한 임시 테이블을 만들고 삽입하는 작업을 피할 수 있습니다. 이는 열 분할 작업을 수행하는 쿼리의 실행 속도를 크게 향상시킬 수 있습니다.

코드 예

문제의 코드는 master..spt_values를 사용하여 CSV 열을 여러 행으로 분할하는 방법을 보여줍니다.

SELECT
    T.col1, RIGHT(LEFT(T.col4,Number-1),
    CHARINDEX(',',REVERSE(LEFT(','+T.col4,Number-1))))
FROM
    master..spt_values,
    table1 T
WHERE
    Type = 'P' AND Number BETWEEN 1 AND LEN(T.col4)+1 AND
    (SUBSTRING(T.col4,Number,1) = ','
    -- OR SUBSTRING(T.col4,Number,1)  = '') --this does not work correctly anyway
로그인 후 복사

이 코드는 master..spt_values의 "P" 유형 테이블을 활용하여 다음과 같은 일련의 숫자를 생성합니다. CSV 열(col4)의 각 문자를 соответствует합니다. 그런 다음 이 숫자를 사용하여 쉼표 구분 기호를 기준으로 열을 행으로 분할합니다.

위 내용은 master..spt_values가 SQL Server에서 쉼표로 구분된 값을 어떻게 효율적으로 분할할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿