복붙노트

[SQL] 어떻게 SELECT 쿼리에서 열을 제외하려면?

SQL

어떻게 SELECT 쿼리에서 열을 제외하려면?

나는 테이블의 100 열이 나는 특정 일을 제외하고 99 열을 나열합니다.

어떻게 그 열 이름을 제외하려면?

해결법

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

    1.

    SELECT column_1, column_2, column_3, 
         /* ...the list of columns 4-97, not shown in this example... */,
         column_98, column_99
       FROM table
    

    (아마도 디자인)이 작업을 수행하는 더 쉬운 방법이 있습니다 : 특별히 검색하려는 각 열에 나열해야합니다.

    이 쓰기에 번거 로움 비록,이 실제로 좋은 일이 : (성능과 유지 보수의 이유로) 생산 코드에 SELECT * 말라고 사용 - 참조 예를 이 질문.

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

    2.자습서 D 관계형 데이터베이스 쿼리 언어는 투영 ALL을 사용하여 제거 할 속성의 표현 될 수 있도록 않지만 그러나이 작업을 수행 할 수 있도록 SQL에서 이러한 상응하는 구문은 존재하지 않는다. 명시 적으로 당신이 원하는 특정 것들을 나열해야합니다.

    자습서 D 관계형 데이터베이스 쿼리 언어는 투영 ALL을 사용하여 제거 할 속성의 표현 될 수 있도록 않지만 그러나이 작업을 수행 할 수 있도록 SQL에서 이러한 상응하는 구문은 존재하지 않는다. 명시 적으로 당신이 원하는 특정 것들을 나열해야합니다.

    당신은 일반적으로 열이 같은 설정을해야하는 경우는보기를 사용할 수 있습니다.

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

    3.당신은 할 수 없습니다.

    당신은 할 수 없습니다.

    테이블의 모든 컬럼을 통해 일부 절차의 의지 루프 (같은 오라클의 all_tabs_columns 사전 뷰는 모든 테이블의 모든 열을 나열)를 선택 C1, C2 (C-3)의 질의를 당신 형성 ... - 이론적으로, 당신은 여기에 동적 SQL을 포함 할 수 탭에서 C99,하지만 난 강력하게이 일을 당신을 낙담. 당신에게 여러 줄의 코드를 저장하지만, 유지하기가 어렵게됩니다. :)

  4. ==============================

    4.이 시도.

    이 시도.

    DROP TABLE #MY_TEMP_TABLE
    
    CREATE TABLE #MY_TEMP_TABLE
    (
        Column_1        int             NULL,
        Column_2        varchar(10)     NULL,
        Column_3        datetime        NULL
    )
    
    INSERT INTO #MY_TEMP_TABLE(Column_1, Column_2, Column_3)
            SELECT  1, 'a', GETDATE()
    UNION   SELECT  2, 'b', GETDATE()
    UNION   SELECT  3, 'c', GETDATE()
    UNION   SELECT  4, 'd', GETDATE()
    
    DECLARE @dSQL nvarchar(1000)
    
    SELECT  @dSQL = 'SELECT TOP 10 '
    
    SELECT  @dSQL = @dSQL + LEFT(nst.ColumnList, LEN(nst.ColumnList)-1) --AS 'List'
    FROM    (SELECT  so.id
            FROM    TEMPDB..SYSOBJECTS so
            WHERE   so.name LIKE '#MY_TEMP_TABLE%'
            AND     so.type = 'u') so
    CROSS APPLY (SELECT sc.Name + ', '
                FROM    TEMPDB..SYSCOLUMNS sc
                WHERE   sc.id = so.id
                AND     sc.colid <> 3
                FOR XML PATH('')) nst
                (ColumnList)
    
    SELECT  @dSQL = @dSQL + ' FROM #MY_TEMP_TABLE'
    
    EXEC sp_executesql @dSQL
    
  5. ==============================

    5.더 빠른 쿼리 솔루션! 굵은 텍스트에서 제거 할 테이블 이름과 열 이름을 추가합니다. 제거 할 같이 많은 분야로 추가 할 수 있습니다.

    더 빠른 쿼리 솔루션! 굵은 텍스트에서 제거 할 테이블 이름과 열 이름을 추가합니다. 제거 할 같이 많은 분야로 추가 할 수 있습니다.

    DECLARE @query nvarchar(max)=(SELECT string_agg(COLUMN_NAME,',') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='YOURTABLENAME'
    
    AND COLUMN_NAME NOT IN ('REMOVEDCOLOUMN',.........))
    
    SET @query ='select '+@query+' FROM YOURTABLENAME' EXEC sp_executesql @query;
    
  6. from https://stackoverflow.com/questions/3650689/how-to-exclude-a-column-from-select-query by cc-by-sa and MIT license