[sql] SQL은 SELECT * [columnA 제외] FROM tableA를 사용하여 열을 제외합니까?

우리는 테이블에서 모든 열을 선택하기 위해 사용할 수 있다는 것을 알고 있습니다.

SELECT * FROM tableA

모든 열을 지정하지 않고 테이블에서 열을 제외시키는 방법이 있습니까?

SELECT * [except columnA] FROM tableA

내가 아는 유일한 방법은 모든 열을 수동으로 지정하고 원하지 않는 열을 제외하는 것입니다. 이것은 시간이 많이 걸리므로 시간과 노력을 절약 할 수있는 방법을 찾고 있으며 테이블에 더 많거나 적은 열이 있어야하는 향후 유지 관리를 찾고 있습니다.



답변

나는 모든 사람에게 동의하지만 … 이와 같은 일을하려고한다면 나는 이렇게 할 수 있습니다.

/* 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 가지 이유 :

  • 이는 클라이언트와 데이터베이스 간의 계약을 안정적으로 만듭니다. 매번 같은 데이터
  • 인덱스를 다루는 성능

편집 (2011 년 7 월) :

개체 탐색기에서 Columns테이블 의 노드를 끌어다 놓으면 목표 중 하나를 달성하는 CSV 열 목록이 쿼리 창에 표시됩니다.


답변

각 열 이름을 쓰고 싶지 않을 경우 수동으로 사용할 수 있습니다 Script Table As마우스 오른쪽 버튼으로 클릭하여 테이블 또는 에서 SSMS 과 같습니다 :

여기에 이미지 설명을 입력하십시오

그런 다음 새 쿼리 편집기 창 에서 전체 선택 쿼리를 얻은 다음 다음과 같이 원하지 않는 열을 제거하십시오.

여기에 이미지 설명을 입력하십시오

끝난


답변

SQL (SQL Server)에서이를 수행하는 자동화 된 방법은 다음과 같습니다.

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);


답변

선택하려는 열이있는보기를 만든 다음 select *보기에서 할 수 있습니다 …


답변

예 가능합니다 (권장되지는 않음).

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')

코드 설명 :

  1. 쉼표로 구분 된 열 이름 목록을 저장할 변수를 선언하십시오. 기본값은 NULL입니다.
  2. 시스템 뷰를 사용하여 테이블의 열 이름을 결정하십시오.
  3. SELECT @variable = @variable + ... FROM열 이름을 연결하는 데 사용 합니다. 이 유형은 SELECT결과 집합을 반환하지 않습니다. 이것은 문서화되지 않은 동작 일 수 있지만 모든 버전의 SQL Server에서 작동합니다. 대안으로 SET @variable = (SELECT ... FOR XML PATH(''))문자열을 연결 하는 데 사용할 수 있습니다 .
  4. ISNULL첫 번째 열 이름이 아닌 경우에만 쉼표를 앞에 추가하는 기능을 사용하십시오 . QUOTENAME열 이름에서 공백과 문장 부호를 지원 하려면이 기능을 사용하십시오 .
  5. WHERE원하지 않는 열을 숨기려면 이 절을 사용 하십시오.
  6. 동적 SQLEXEC (@variable) 이라고도하는을 사용 하여 런타임시 열 이름을 분석하십시오. 컴파일 타임에 열 이름을 모르기 때문에 필요합니다.

답변

다른 사람들 이이 작업을 수행 할 수있는 방법이 없다고 말했지만 Sql Server를 사용하는 경우 출력을 쉼표로 구분하여 변경하는 것이 좋습니다.

select top 1 * from table

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