복붙노트

[SQL] SQL은 TABLEA FROM [COLUMNA 제외] SELECT *를 이용하여 열을 제외?

SQL

SQL은 TABLEA FROM [COLUMNA 제외] SELECT *를 이용하여 열을 제외?

우리는 모든 것을 테이블에서 모든 열을 선택 알고, 우리가 사용할 수 있습니다

SELECT * FROM tableA

모든 열을 지정하지 않고 테이블의 컬럼 (들)을 제외하는 방법이 있나요?

SELECT * [except columnA] FROM tableA

내가 알고있는 유일한 방법은 수동으로 모든 열을 지정하고 불필요한 열을 제외하는 것입니다. 이건 정말 시간 나는 미래의 유지 보수해야 테이블이 가지고 더 / 덜 열뿐만 아니라,이 시간과 노력을 절약 할 수있는 방법을 찾고 있어요 그래서이 소요됩니다.

해결법

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

    1.나는 모두 동의 ...하지만 난 이런 식으로 뭔가를 할 거라고한다면 나는 이런 식으로 할 수 있습니다

    나는 모두 동의 ...하지만 난 이런 식으로 뭔가를 할 거라고한다면 나는 이런 식으로 할 수 있습니다

    /* Get the data into a temp table */
    SELECT * INTO #TempTable
    FROM YourTable
    /* Drop the columns that are not needed */
    ALTER TABLE #TempTable
    DROP COLUMN ColumnToDrop
    /* Get results and drop temp table */
    SELECT * FROM #TempTable
    DROP TABLE #TempTable
    
  2. ==============================

    2.아니.

    아니.

    유지 보수 등 가장 좋은 방법은 필요한 열을 지정하는 것입니다.

    적어도 두 가지 이유 :

    편집 (2011.07.06)

    열이 테이블에 대한 노드 탐색기는 Object에서 드래그하면, 당신의 목표 중 하나를 달성 당신을위한 쿼리 창에서 컬럼의 CSV 목록을 넣습니다

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

    3.SQL (SQL 서버)에서이 작업을 수행 할 수있는 자동화 된 방법입니다 :

    SQL (SQL 서버)에서이 작업을 수행 할 수있는 자동화 된 방법입니다 :

    declare @cols varchar(max), @query varchar(max);
    SELECT  @cols = STUFF
        (
            ( 
                SELECT DISTINCT '], [' + name
                FROM sys.columns
                where object_id = (
                    select top 1 object_id from sys.objects
                    where name = 'MyTable'
                )
                and name not in ('ColumnIDontWant1', 'ColumnIDontWant2')
                FOR XML PATH('')
            ), 1, 2, ''
        ) + ']';
    
    SELECT @query = 'select ' + @cols + ' from MyTable';  
    EXEC (@query);
    
  4. ==============================

    4.각 열 이름을 수동으로이 같은 SSMS에서 테이블 또는 뷰를 마우스 오른쪽 버튼으로 클릭하여 스크립트 테이블로 사용할 수 있습니다 쓰기하지 않으려면 :

    각 열 이름을 수동으로이 같은 SSMS에서 테이블 또는 뷰를 마우스 오른쪽 버튼으로 클릭하여 스크립트 테이블로 사용할 수 있습니다 쓰기하지 않으려면 :

    그럼 당신은 다음과 같이 불필요한 열을 제거 새 쿼리 편집기 창에서 전체 선택 쿼리를 얻을 것이다 :

    끝난

  5. ==============================

    5.당신은 당신이 선택하고자하는 열이 뷰를 만들 수 있습니다, 당신은 단지보기에서 * 선택할 수 있습니다 ...

    당신은 당신이 선택하고자하는 열이 뷰를 만들 수 있습니다, 당신은 단지보기에서 * 선택할 수 있습니다 ...

  6. ==============================

    6.네, 그것은 가능 (단, 권장하지 않음).

    네, 그것은 가능 (단, 권장하지 않음).

    CREATE TABLE contact (contactid int, name varchar(100), dob datetime)
    INSERT INTO contact SELECT 1, 'Joe', '1974-01-01'
    
    DECLARE @columns varchar(8000)
    
    SELECT @columns = ISNULL(@columns + ', ','') + QUOTENAME(column_name)
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = 'contact' AND COLUMN_NAME <> 'dob'
    ORDER BY ORDINAL_POSITION
    
    EXEC ('SELECT ' + @columns + ' FROM contact')
    

    코드의 설명 :

  7. ==============================

    7.다른 사람이 말한 것처럼 다음 수행이이 작업을 수행 할 수있는 방법은 없지만, 당신은 SQL Server에게 내가 사용 쉼표로 출력을 변경하는 것입니다 트릭을 사용하는 경우 것은 분리

    다른 사람이 말한 것처럼 다음 수행이이 작업을 수행 할 수있는 방법은 없지만, 당신은 SQL Server에게 내가 사용 쉼표로 출력을 변경하는 것입니다 트릭을 사용하는 경우 것은 분리

    select top 1 * from table
    

    출력 창에서 컬럼의 전체 목록을 잘라. 그런 다음에 그들 모두를 입력하지 않고도 원하는 열을 선택할 수 있습니다.

  8. ==============================

    8.기본적으로, 당신은 당신이하고 싶은 일을 할 수 없습니다 -하지만 당신은 좀 더 쉽게 일을 당신을 도울 수있는 권리 도구를 얻을 수 있습니다.

    기본적으로, 당신은 당신이하고 싶은 일을 할 수 없습니다 -하지만 당신은 좀 더 쉽게 일을 당신을 도울 수있는 권리 도구를 얻을 수 있습니다.

    당신이 레드 게이트의 SQL 프롬프트에서 보면, 입력 "을 MyTable SELECT * FROM"다음 필드의 목록을 확장합니다 "*", 및 히트 후 커서 다시 이동하고, 그 몇 가지 필드를 당신을 제거 할 수 있습니다 할 필요가 없습니다.

    하지만 이놈의 좋은 하나 - 그것은 아닌 완벽한 솔루션입니다! :-) 너무 나쁜 MS SQL Server 관리 Studio의 인텔리 아직이 기능을 제공하는 지능형 충분하지 않습니다 .......

    즙을 짜고 난 찌꺼기

  9. ==============================

    9.어떤이 작업을 수행 할 수있는 방법이 없습니다. 그 상황에서 가능한 있다면 아마 당신은 사용자 정의보기를 만들 수 있습니다

    어떤이 작업을 수행 할 수있는 방법이 없습니다. 그 상황에서 가능한 있다면 아마 당신은 사용자 정의보기를 만들 수 있습니다

    당신의 DB 동적 실행을 지원하는 경우 u는 SP를 작성하고 u는 그것을보고 싶지 않아 열을 전달하고 동적으로 쿼리를 작성하고 당신에게 결과를 반환 할 수있는 SQL 편집 할 수 있습니다. 나는이 SQL 서버이어야에서 행할 생각

  10. ==============================

    10.당신은 SQL Server Management Studio를 사용하는 경우 다음과 같은 다음을 수행하십시오

    당신은 SQL Server Management Studio를 사용하는 경우 다음과 같은 다음을 수행하십시오

    즐겨.

  11. ==============================

    11.SQL Management Studio에서 당신이 개체 탐색기에서 열을 확장 할 수 있습니다, 다음 쉼표가 열로 구분 된 목록 얻기 위해 쿼리 창에 열 트리 항목을 끕니다.

    SQL Management Studio에서 당신이 개체 탐색기에서 열을 확장 할 수 있습니다, 다음 쉼표가 열로 구분 된 목록 얻기 위해 쿼리 창에 열 트리 항목을 끕니다.

  12. ==============================

    12.요약하면 당신은 그것을 할 수 없다,하지만 난 당신이 합법적으로 사용할 수 있습니다 시나리오가 "있다", 위의 코멘트의 모든 동의 * (예 : 페이징 등) 전체 목록의 특정 범위를 선택하기 위해 중첩 된 쿼리를 만들 때 왜 세상에서 당신이 내부에서이를 수행 한 외부 SELECT 문에 각 열을 지정할까요?

    요약하면 당신은 그것을 할 수 없다,하지만 난 당신이 합법적으로 사용할 수 있습니다 시나리오가 "있다", 위의 코멘트의 모든 동의 * (예 : 페이징 등) 전체 목록의 특정 범위를 선택하기 위해 중첩 된 쿼리를 만들 때 왜 세상에서 당신이 내부에서이를 수행 한 외부 SELECT 문에 각 열을 지정할까요?

  13. ==============================

    13.

    DECLARE @SQL VARCHAR(max), @TableName sysname = 'YourTableName'
    
    SELECT @SQL = COALESCE(@SQL + ', ', '') + Name 
    FROM sys.columns
    WHERE OBJECT_ID = OBJECT_ID(@TableName)
    AND name NOT IN ('Not This', 'Or that');
    
    SELECT @SQL = 'SELECT ' + @SQL + ' FROM ' + @TableName
    
    EXEC (@SQL)
    

    최신 정보:

    당신은 또한 당신이 더 자주 사용하는 경우이 작업을 돌볼 저장 프로 시저를 만들 수 있습니다. 이 예에서 나는 ()는 SQL 서버 2016+에 사용할 수있는 STRING_SPLIT 내장 사용했다 당신이 필요하지만 만약 SO에 수동으로 만드는 방법의 예를 pleanty있다.

    CREATE PROCEDURE [usp_select_without]
    @schema_name sysname = N'dbo',
    @table_name sysname,
    @list_of_columns_excluded nvarchar(max),
    @separator nchar(1) = N','
    AS
    BEGIN
     DECLARE 
     @SQL nvarchar(max),
     @full_table_name nvarchar(max) = CONCAT(@schema_name, N'.', @table_name);
    
     SELECT @SQL = COALESCE(@SQL + ', ', '') + QUOTENAME([Name])
     FROM sys.columns sc
     LEFT JOIN STRING_SPLIT(@list_of_columns_excluded, @separator) ss ON sc.[name] = ss.[value]
     WHERE sc.OBJECT_ID = OBJECT_ID(@full_table_name, N'u')
     AND ss.[value] IS NULL;
    
     SELECT @SQL = N'SELECT ' + @SQL + N' FROM ' + @full_table_name;
     EXEC(@SQL)
    END
    

    그리고 단지 :

    EXEC [usp_select_without] 
    @table_name = N'Test_Table',
    @list_of_columns_excluded = N'ID, Date, Name';
    
  14. ==============================

    14.우리는 절차의 이야기 경우에는 새 쿼리를 생성하고 IMMEDIATE에게 그것을 실행하려면이 트릭와 함께 작동합니다 :

    우리는 절차의 이야기 경우에는 새 쿼리를 생성하고 IMMEDIATE에게 그것을 실행하려면이 트릭와 함께 작동합니다 :

    SELECT LISTAGG((column_name), ', ') WITHIN GROUP (ORDER BY column_id)
    INTO var_list_of_columns
    FROM ALL_TAB_COLUMNS
    WHERE table_name = 'PUT_HERE_YOUR_TABLE'
    AND column_name NOT IN ('dont_want_this_column','neither_this_one','etc_column');
    
  15. ==============================

    15.아니, 일반적인 방법으로 선언 SQL을 사용하지 않습니다.

    아니, 일반적인 방법으로 선언 SQL을 사용하지 않습니다.

    나는 당신의 제안 구문은 가치가 좋은 생각합니다. 사실, 관계형 데이터베이스 언어 '튜토리얼 D'는이 ALL을 키워드하지만 속성 (열)의 집합으로 준수 매우 유사한 구문을 가지고있다.

    그러나, SQL의 SELECT *이 이미 (여기 Guffa의 대답 @ 전형적인 반대입니다) 많은에게 방탄를 얻을 내가 SELECT ALL 생각하지 않습니다하지만 조만간 SQL 표준에 얻을 것이다, 그래서.

    나는 최고의 '작업 주변이'당신이 다음 ThatView SELECT * FROM 욕망에만 열이있는 VIEW를 만드는 것입니다 생각합니다.

  16. ==============================

    16.PostgreSQL은 그 일을하는 방법이있다

    PostgreSQL은 그 일을하는 방법이있다

    PLS 참조 : http://www.postgresonline.com/journal/archives/41-How-to-SELECT-ALL-EXCEPT-some-columns-in-a-table.html

    정보 스키마 해킹 방법

    SELECT 'SELECT ' || array_to_string(ARRAY(SELECT 'o' || '.' || c.column_name
            FROM information_schema.columns As c
                WHERE table_name = 'officepark' 
                AND  c.column_name NOT IN('officeparkid', 'contractor')
        ), ',') || ' FROM officepark As o' As sqlstmt
    

    내 특정 예를 들어, 테이블 위의이 - SQL 문을 생성하는이 같은 모습

    SELECT o.officepark, o.owner, O로 사무실 공원 of.square 영상

  17. ==============================

    17.BigQuery에 같은 현대 SQL 언어는 우수한 솔루션을 제안한다

    BigQuery에 같은 현대 SQL 언어는 우수한 솔루션을 제안한다

    이는 테이블 열 이름 변경에 모든 시간을 업데이트해야 컬럼의 긴 목록을 피하기 위해 매우 강력한 SQL 구문입니다. 그리고이 기능은 유감 현재 SQL Server 구현에 없습니다. 희망 어느 날, 마이크로 소프트 애저는 더 많은 데이터 과학자가 친절합니다.

    데이터 과학자는 쿼리를 단축하고 (복제 또는 다른 이유로 인해) 약간의 열을 제거 할 수있는 빠른 옵션을 가질 수 있기를.

    https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#select-modifiers

  18. ==============================

    18.나는이 (SQL 서버, MySQL은, 오라클, PostgreSQL을)를 지원하는 데이터베이스 모르겠어요. 그것은 확실히 당신이 원하는에만 열을 지정한다고 생각 있도록 SQL 표준의 일부가 아닙니다.

    나는이 (SQL 서버, MySQL은, 오라클, PostgreSQL을)를 지원하는 데이터베이스 모르겠어요. 그것은 확실히 당신이 원하는에만 열을 지정한다고 생각 있도록 SQL 표준의 일부가 아닙니다.

    당신은 물론 당신의 SQL 문을 동적으로 구축하고 서버에서 실행있을 수 있습니다. 그러나 이것은 SQL 주입에 대한 가능성을 열어 ..

  19. ==============================

    19.나는이 조금 오래 알고 있지만 난 그냥 같은 문제로 실행했고 대답을 찾고 있었다. 그럼 난 수석 개발자 쇼 나를 아주 간단한 트릭을했다.

    나는이 조금 오래 알고 있지만 난 그냥 같은 문제로 실행했고 대답을 찾고 있었다. 그럼 난 수석 개발자 쇼 나를 아주 간단한 트릭을했다.

    당신이 관리 스튜디오 쿼리 편집기를 사용하는 경우, 당신은 당신이 폴더에 열을 볼 수 있도록에서 선택되는 테이블을 확장, 데이터베이스를 확장합니다.

    당신의 선택 성명에서, 단지 위의 드래그 폴더에 참조 된 열을 선택하고 쿼리 창에 놓습니다. 그런 다음 단순히 열 목록에서 ID 열을 제거, 테이블의 모든 열을 붙여 넣 ...

  20. ==============================

    20.이 문제를 해결하는 가장 좋은 방법은 당신이 필요한 열 뷰를 생성하고 데이터를 형성 검색 할 수있는 뷰를 사용하고 있습니다

    이 문제를 해결하는 가장 좋은 방법은 당신이 필요한 열 뷰를 생성하고 데이터를 형성 검색 할 수있는 뷰를 사용하고 있습니다

    example
    
    mysql> SELECT * FROM calls;
    +----+------------+---------+
    | id | date       | user_id |
    +----+------------+---------+
    |  1 | 2016-06-22 |       1 |
    |  2 | 2016-06-22 |    NULL |
    |  3 | 2016-06-22 |    NULL |
    |  4 | 2016-06-23 |       2 |
    |  5 | 2016-06-23 |       1 |
    |  6 | 2016-06-23 |       1 |
    |  7 | 2016-06-23 |    NULL |
    +----+------------+---------+
    7 rows in set (0.06 sec)
    
    mysql> CREATE VIEW C_VIEW AS
        ->     SELECT id,date from calls;
    Query OK, 0 rows affected (0.20 sec)
    
    mysql> select * from C_VIEW;
    +----+------------+
    | id | date       |
    +----+------------+
    |  1 | 2016-06-22 |
    |  2 | 2016-06-22 |
    |  3 | 2016-06-22 |
    |  4 | 2016-06-23 |
    |  5 | 2016-06-23 |
    |  6 | 2016-06-23 |
    |  7 | 2016-06-23 |
    +----+------------+
    7 rows in set (0.00 sec)
    
  21. ==============================

    21.음, 대신 *를 지정하는, 당신이 원하는 열을 지정하는 일반적인 것이 좋습니다. 당신은 필드 만 상태는 대가로 선택을하고자한다 그래서.

    음, 대신 *를 지정하는, 당신이 원하는 열을 지정하는 일반적인 것이 좋습니다. 당신은 필드 만 상태는 대가로 선택을하고자한다 그래서.

  22. ==============================

    22.동료는 좋은 대안을 권장합니다 :

    동료는 좋은 대안을 권장합니다 :

    끝난...

    이것은 우리에게 많은 도움을 주었다.

  23. ==============================

    23.당신은 예를 들어, 암호와 같은 민감한 경우 열을 제외 할 경우, 나는 값 숨기기 위해이 작업을 수행 : SELECT * ","TABLENAME FROM 암호를;

    당신은 예를 들어, 암호와 같은 민감한 경우 열을 제외 할 경우, 나는 값 숨기기 위해이 작업을 수행 : SELECT * ","TABLENAME FROM 암호를;

  24. ==============================

    24.개체 탐색기에서 마우스 오른쪽 단추로 클릭 테이블, 선택 최고 1,000 행

    개체 탐색기에서 마우스 오른쪽 단추로 클릭 테이블, 선택 최고 1,000 행

    그것은 * 모든 열이 아닌 목록을 것입니다. 이어서 불필요한 열 (들)을 제거한다. 훨씬 더 빨리 스스로를 입력 이상이어야한다.

    그럼 당신은 느낄 때이 조금 너무 많은 일이, 레드 게이트의 SQL 프롬프트를 얻고, TBL에서 형 SSF의 *에 가서 다시 탭을 클릭합니다.

  25. ==============================

    25.나는이 경우에 자주 사용하는 것을 그 :

    나는이 경우에 자주 사용하는 것을 그 :

    declare @colnames varchar(max)=''
    
    select @colnames=@colnames+','+name from syscolumns where object_id(tablename)=id and name not in (column3,column4)
    
    SET @colnames=RIGHT(@colnames,LEN(@colnames)-1)
    

    1 열, 2 열, COLUMN5 같은 외모를 @colnames

  26. ==============================

    26.때때로 같은 프로그램은 다른 데이터베이스 철골 구조를 처리해야합니다. 나는 select 문에서 오류를 방지하기 위해 프로그램에서 열 목록을 사용하지 수 있도록.

    때때로 같은 프로그램은 다른 데이터베이스 철골 구조를 처리해야합니다. 나는 select 문에서 오류를 방지하기 위해 프로그램에서 열 목록을 사용하지 수 있도록.

    * 나에게 모든 선택적 필드를 제공합니다. 필드를 사용하기 전에 데이터 테이블에 존재하면 내가 확인. 이 선택에 *를 사용하는 나의 이유입니다.

    이것은 내가 제외 필드를 처리하는 방법입니다 :

    Dim da As New SqlDataAdapter("select * from table", cn)
    da.FillSchema(dt, SchemaType.Source)
    Dim fieldlist As String = ""
    For Each DC As DataColumn In DT.Columns
       If DC.ColumnName.ToLower <> excludefield Then
        fieldlist = fieldlist &  DC.Columnname & ","
       End If
      Next
    
  27. ==============================

    27.이 질문은 오래 알고 있지만, 나는이 계속 될 수 helpful.The 대답은 SQL 서버 포럼에서 논의에서 영감을 바랍니다. 이 저장 프로 시저를 만들 수 있습니다. 또한 필드를 제외하고 하나 이상의 추가 수정할 수 있습니다.

    이 질문은 오래 알고 있지만, 나는이 계속 될 수 helpful.The 대답은 SQL 서버 포럼에서 논의에서 영감을 바랍니다. 이 저장 프로 시저를 만들 수 있습니다. 또한 필드를 제외하고 하나 이상의 추가 수정할 수 있습니다.

    DECLARE @SQL NVARCHAR(MAX)
    SELECT @SQL = COALESCE(@SQL + ', ', ' ' ) + name from sys.columns where name not in ('colName1','colName2') and object_id = (Select id from sysobjects where name = 'tblName')
    SELECT @SQL = 'SELECT ' + @SQL + ' FROM ' + 'tblName'
    EXEC sp_executesql  @SQL
    
  28. ==============================

    28.이 작업을 수행하는 것이 간단하지 않을까요 :

    이 작업을 수행하는 것이 간단하지 않을까요 :

    sp_help <table_name>
    

    훨씬 적은 ... 원하지 않는 밖으로 열을 새 쿼리 창에 (수직리스트를 생성) 복사> 붙여 넣기>는 'COLUMN_NAME'열 - 클릭하고 바로 각 열 값의 ... 코멘트 앞에 쉼표를 입력 여기에 여전히 관리가 제공하는 코드보다 입력.

  29. ==============================

    29.당신은 devart.com뿐만 아니라 레드 게이트에서 프롬프트 와일드 카드 단지 SQL과 같은 *을 확장하는을의 SQL 완료 얻을 수 있습니다 (cairnz의 대답에 설명 된대로)뿐만 아니라 열 선택기를 사용하면 모든를 확인할 수있는 체크 박스와 드롭 다운을 제공하지 당신이 선택 목록에서 원하는 그들이 당신이 (당신이 다음 열을 취소 경우가 자동으로 선택 목록에서 제거됩니다)에 대해 자동으로 삽입됩니다 열.

    당신은 devart.com뿐만 아니라 레드 게이트에서 프롬프트 와일드 카드 단지 SQL과 같은 *을 확장하는을의 SQL 완료 얻을 수 있습니다 (cairnz의 대답에 설명 된대로)뿐만 아니라 열 선택기를 사용하면 모든를 확인할 수있는 체크 박스와 드롭 다운을 제공하지 당신이 선택 목록에서 원하는 그들이 당신이 (당신이 다음 열을 취소 경우가 자동으로 선택 목록에서 제거됩니다)에 대해 자동으로 삽입됩니다 열.

  30. ==============================

    30.SSMS에서 인텔리 및 앨리어싱과 쉬운 방법이있다. 이 시도  텍스트 편집기에서 마우스 오른쪽 버튼을 클릭하고 확인 인텔리가 활성화되어 있는지 확인합니다.  별칭으로 쿼리 입력 [SELECT t을. * TABLENAME의 t FROM].  . 텍스트 t 및 AST를 이동; 과 및 AST를 삭제; 및 SSMS 의지 자동리스트에게 F 별칭 테이블의 열입니다. 당신은 신속 / O를 작성하는 SSMS를 사용하지 승 원하는 열만을 지정할 수있는 다른 스크립트를 선택하고 더 복사 / 붙여 넣기 작업을한다. 나는이 모든 시간을 사용합니다.

    SSMS에서 인텔리 및 앨리어싱과 쉬운 방법이있다. 이 시도  텍스트 편집기에서 마우스 오른쪽 버튼을 클릭하고 확인 인텔리가 활성화되어 있는지 확인합니다.  별칭으로 쿼리 입력 [SELECT t을. * TABLENAME의 t FROM].  . 텍스트 t 및 AST를 이동; 과 및 AST를 삭제; 및 SSMS 의지 자동리스트에게 F 별칭 테이블의 열입니다. 당신은 신속 / O를 작성하는 SSMS를 사용하지 승 원하는 열만을 지정할 수있는 다른 스크립트를 선택하고 더 복사 / 붙여 넣기 작업을한다. 나는이 모든 시간을 사용합니다.

  31. from https://stackoverflow.com/questions/729197/sql-exclude-a-column-using-select-except-columna-from-tablea by cc-by-sa and MIT license