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


733

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

SELECT * FROM tableA

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

SELECT * [except columnA] FROM tableA

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


27
프로덕션 코드를 넣지 않고 문제 해결을 위해이 기능을 사용하는 것이 매우 편리합니다. 예 : 쿼리하는 여러 열이있는 테이블이 있지만 텍스트 열을 빨리 생략하고 싶습니다.
Micah B.

openquery로 작업 할 때이 작업이 필요했습니다 (SQL Server가 아닌 MySQL의 기능이 필요하지만). SQL Server를 사용하여 MySQL 데이터베이스를 쿼리해야했습니다. MySQL 테이블에는 고정 너비 문자 열이 있으므로 SELECT *쿼리를 사용할 수 없습니다 (OLE DB에 매핑하는 데 문제가 있음). MySQL 데이터베이스에 직접 액세스 할 수 없었기 때문에 올바른 열을 지정할 수 없었지만 SQL Server는 고정 너비 문자 열의 이름을 알려주기에 충분했습니다 ...
jahu

2
나는이 작업을 수행하는 또 다른 이유를 추가하고 싶습니다 : SELECT DISTINCT *다른 사람이 만든 중복 행이없는 작업에 키 열을 제외하고
undrline

1
시간이 많이 걸린다는 데 동의합니다. 그렇기 때문에 일반적으로 표를 마우스 오른쪽 버튼으로 클릭하고 "최상위 1000 개 행 선택"을 선택한 다음 원하지 않는 열을 제거합니다.
ThomasRones

2
잊지 마세요 : 많은 경우에 개발자는 열이 변경 될 수 있기 때문에 열을 알지 못합니다. 이는 데이터웨어 하우스에서 일반적입니다. 6 개월 후에는 추가 열을 추가하므로 코드를 변경하지 않고 선택해야합니다.

답변:


446

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

/* 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

222
비효율적 ...하지만 매우 창조적 인 :)
기예르모 구티에레스

1
아름다운. 나는 종종 그룹화가 필요하기 때문에 두 개의 임시 테이블을 조인하거나 임시의 모든 열이 필요하지 않은 다른 테이블에 임시를 포함해야합니다.
VISQL

2
아주 좋아요 물론 열 이름을 추출하는 문제를 해결합니다.
토스터

1
@CeesTimmerman-중복 된 열 이름과 관련된 쿼리가있는 경우 별도의 문제입니다. Google "SQL 열 이름 바꾸기"또는 "SQL 열 별칭" SELECT table1.ID AS table1ID ...IIRC 와 같은 것 .
ToolmakerSteve

3
@ToolmakerSteve이 질문의 아이디어는 필요하지 않은 열만 지정하는 것입니다. 명명 열은 특정 테이블의 20 개 이상의 열을 모두 지정해야합니다.
Cees Timmerman

289

아니.

유지 관리 수준이 가장 좋은 방법은 필요한 열만 지정하는 것입니다.

적어도 2 가지 이유 :

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

편집 (2011 년 7 월) :

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


3
나는 columsn을 드래그하는 것에 대해 결코 알지 못했다. 당신이 GBN을 다시 저장해 주셔서 감사합니다. 당신은 당신의 SQL 전문 지식으로 인해 많은 $$를 만들어야합니다
l --''''''--------- '' '' '' '' '' '' '' '

4
특히 ETL 루틴에서 SELECT *에 유효한 시나리오가 있습니다. 가장 좋은 대답은 동적 SQL을 사용하는 것입니다.
mishkin

1
통계적 탐구를 위해 학생에 대한 모든 데이터를 말하지만 개인 정보 보호를 강화하기 위해 학생 ID 자체를
낮추지 않는 경우가 있습니다.

3
"필요한 열만 지정"-하드 코딩 비음
RM Haley

9
이와 같은 답변은 많은 표를 얻지 만 관심이있는 한 가치가 없습니다. 개념적으로 "ABC 제외"를 선택할 수 있다는 것은 언어가 지원하는 "* 선택"보다 더 이상 문제가되지 않습니다. OP는 분명히 무언가를 성취 할 수있는 방법을 요구하고 있습니다. 이 질문에 대답하는 사람은 OP가 프로덕션 코드 에서이 코드를 사용 하려는지 또는 데이터베이스 용 코드를 개발하는 동안 이와 같은 쿼리를 즉시 실행할 필요가 있는지 알 수있는 방법이 없으므로 좋은 표준에 대한 강의 전혀 가치를 제공하지 않습니다.
Itsme2003

68

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

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

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

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

끝난


2
이보다 더 쉽게 선택 모든 열 이름 다음에 쉼표를 추가 할 수 있습니다.
shaijut

68

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

CTE 또는 다른 하위 쿼리 결과에서 쿼리하는 경우 어떻게합니까? 간단한 예 : row_number()각 행에 결과를 추가하는 하위 쿼리를 만든 다음 조인을 수행 한 다음 조인 결과에서를 제외한row_number 모든 항목을 선택할 수 있습니다. row_number
ely

43

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


8
처음에 내 반응은 "단지 열을 지정하는 것보다 얼마나 쉬운가?"였습니다. 그러나 유지 관리 측면에서 개선이 될 수 있다고 결정했습니다.
ToolmakerSteve

1
또한 임시 테이블 또는 동적 SQL을 사용하지 않고 쿼리 최적화 프로그램을 지원합니다.
underscore_d

30

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

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) 이라고도하는을 사용 하여 런타임시 열 이름을 분석하십시오. 컴파일 타임에 열 이름을 모르기 때문에 필요합니다.

감사! 이것이 내 문제 를 해결하는 열쇠였습니다 .
안토니오

하나의 질문이 있습니다. 어떤 이유로 두 번째 선택을 EXEC 문에 넣어야합니까? 나는 그것이 효과적으로 필요하다는 것을 알았지 만 왜 내가 단순히 글을 쓸 수 없는지 궁금합니다SELECT @columns FROM contact
Antonio

17

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

select top 1 * from table

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


13
SSMS에서 드래그하는 것에 대한 내 팁보기
gbn

11

기본적으로 원하는 것을 할 수는 없지만 일을 조금 더 쉽게 만드는 데 도움이되는 올바른 도구를 얻을 수 있습니다.

Red-Gate의 SQL Prompt 를 보면 "SELECT * FROM MyTable"을 입력 한 다음 커서를 "*"다음으로 이동 한 다음 <TAB>을 눌러 필드 목록을 확장하고 해당 필드를 제거하십시오. 필요하지 않습니다.

완벽한 솔루션은 아니지만 대단한 좋은 솔루션입니다! :-) 너무 나쁜 MS SQL Server Management Studio의 Intellisense는 여전히이 기능을 제공 할만큼 지능적이지 않습니다.

마크


이것은 좋지만 문제는 쿼리가 커질 수 있다는 것입니다. "prod code"가 아니라 ad-hoc query에는 "except"기능을 사용하는 것이 좋습니다.
Micah B.

8

이 작업을 수행 할 방법이 없습니다. 어쩌면 상황에 맞는 경우 사용자 정의보기를 만들 수 있습니다.

편집 DB가 동적 SQL 실행을 지원하는 경우 SP를 작성하고보고 싶지 않은 열을 전달하고 쿼리를 동적으로 생성하고 결과를 반환하도록 할 수 있습니다. 나는 이것이 SQL Server atleast에서 가능하다고 생각합니다.


13
그것은 가능하지만 나는 그 사람을 해고 할 것입니다.
Lieven Keersmaekers 2009

클래식 정리 문제 : 임시 테이블에 보관하려는 dfata를 복사하고 큰 테이블을 잘라 내고 임시 테이블로 다시 채 웁니다. 신원 열을 제외해야합니다.
Volker

8

SQL Server Management Studio를 사용하는 경우 다음과 같이하십시오.

  1. 원하는 테이블 이름을 입력하고 선택하십시오
  2. Alt+를 누르십시오F1
  3. o / p는 표의 열을 보여줍니다.
  4. 원하는 열을 선택하십시오
  5. 선택 쿼리에 복사하여 붙여 넣기
  6. 쿼리를 시작하십시오.

즐겨.


7

SQL Management Studio에서는 개체 탐색기에서 열을 확장 한 다음 Columns트리 항목을 쿼리 창으로 끌어 쉼표로 구분 된 열 목록을 얻을 수 있습니다.


6

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


조인을 수행 할 때 "SELECT table1. * ..."과 비슷한 "innername. *"변형을 사용하여 내부 열을 나타낼 수 있습니까?
ToolmakerSteve

6
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 Server 2016 이상에서 사용할 수 있는 기본 제공 STRING_SPLIT () 을 사용했지만 필요한 경우 SO에서 수동으로 만드는 방법에 대한 예가 많이 있습니다.

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

5

프로 시저에 대해 이야기하는 경우,이 트릭을 사용하여 새 쿼리를 생성하고 이를 즉시 실행 합니다.

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

5

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

일반적인 방식으로 선언적 SQL을 사용합니다.

나는 당신의 제안 된 구문이 합당하고 좋다고 생각합니다. 실제로, 관계형 데이터베이스 언어 '자습서 D'는 키워드 ALL BUT뒤에 속성 세트 (열) 가있는 구문과 매우 유사합니다 .

그러나 SQL에는 SELECT *이미 많은 단점이 있습니다 (@Guffa의 대답은 전형적인 반대 의견입니다). 그래도 SELECT ALL BUT곧 SQL 표준에 들어갈 것이라고 는 생각하지 않습니다 .

가장 좋은 '해결 방법'은 VIEW원하는 열만으로 를 만드는 것 입니다 SELECT * FROM ThatView.


1
@underscore_d : 이제 답변을 수정했습니다.
언젠가

쿨, 나는 당신의 마지막 두 단락에 동의합니다. 튜토리얼 D에 대한 정보는 흥미 롭습니다.하지만 select *의심 스러워하는 사람들과 동의하는 경향이 있습니다. 일반적으로 데이터 테이블을 처리해야하지만 (더 나은 단어가 부족한) 구축에는별로 도움이되지 않는 임시 작업 및 프로그램에 매우 유용합니다. '순수한'쿼리. 그럼에도 불구하고 ANSI 표준에 있지 않다고해서 Microsoft가 다른 언어와 마찬가지로 방언에 추가 할 수는 없지만 회의를 할 것인지에 대해서는 회의적입니다.
underscore_d

5

BigQuery와 같은 최신 SQL 언어는 훌륭한 솔루션을 제안합니다

SELECT * EXCEPT (열 이름 X, [열 이름 Y, ...])

테이블 열 이름 변경으로 인해 항상 업데이트해야하는 긴 열 목록을 피하기위한 매우 강력한 SQL 구문입니다. 그리고이 기능은 현재 SQL Server 구현에서 유감입니다. 바라건대, 언젠가 Microsoft Azure가 데이터 과학자에게 더 친숙해지기를 바랍니다.

데이터 과학자는 쿼리를 단축하고 중복 또는 기타 이유로 인해 일부 열을 제거 할 수있는 빠른 옵션을 원합니다.

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


4

Postgres SQL에는 방법이 있습니다.

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 문을 생성합니다.

o로 officepark, o.owner, o.squarefootage를 선택하십시오


이 이론적으로 질문에 대답 할 수 있습니다 동안, 바람직 할 것이다 여기에 대한 대답의 본질적인 부분을 포함하고 참조 할 수 있도록 링크를 제공합니다.
Bhargav Rao

3

나는 이것을 지원하는 데이터베이스 (SQL Server, MySQL, Oracle, PostgreSQL)를 모른다. 확실히 SQL 표준의 일부가 아니므로 원하는 열만 지정해야한다고 생각합니다.

물론 SQL 문을 동적으로 작성하고 서버에서 실행하도록 할 수 있습니다. 그러나 이것은 SQL 주입 가능성을 열어줍니다.


3

나는 이것이 조금 오래되었다는 것을 알고 있지만 방금 같은 문제가 발생하여 답을 찾고있었습니다. 그런 다음 수석 개발자에게 매우 간단한 트릭을 보여주었습니다.

Management Studio 조회 편집기를 사용중인 경우 데이터베이스를 펼친 후 선택중인 테이블을 펼치면 열 폴더를 볼 수 있습니다.

select 문에서 위의 참조 열 폴더를 강조 표시하고 쿼리 창으로 끌어다 놓으십시오. 테이블의 모든 열을 붙여 넣은 다음 열 목록에서 ID 열을 제거하기 만하면됩니다 ...


1
그렇습니다. 그러나 5 개의 조인이 있다면 어떻게해야할까요SELECT * Except(tableName.ColumnName) FROM ...
Pawel Cioch

나는 이것이 유용하다고 생각한다 :) 나는 그것에 대해 모른다. 그럼에도 불구하고 이것은 주제 질문에 대한 답이 아니다.
Fka

3

이 문제를 해결하는 가장 좋은 방법은 뷰를 사용하여 필요한 열이있는 뷰를 만들고 데이터를 검색 할 수 있습니다.

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)

3
열 수가 많으면 100이라고 말하면 모든 열을 선택하고 하나만 선택하려고합니다. 더 나은 접근법이 있습니까?
KartikKannapur

5
이것은 한 가지 요점을 놓친 것입니다. 두 번째 호출에서 "id, date"를 선택하고 있습니다. 먼저 할 때는 먼저 수행하십시오.
keithpjolley

3

예를 들어 암호와 같은 대소 문자를 제외하려면 값을 숨기려면 다음과 같이하십시오.

SELECT * , "" as password FROM tableName;


이것은 나를 위해 일했다
Arun Prasad ES

1
물론 일반 텍스트 암호는 데이터베이스에 저장하지 않아야합니다. 최소한 소금과 후추로 해시해야합니다.
Anders_K

2

*를 지정하는 대신 원하는 열을 지정하는 것이 가장 좋습니다. 따라서 선택하려는 필드를 표시해야합니다.


2

한 동료가 좋은 대안을 권고했습니다.

  • 이전 쿼리 (데이터를 생성하거나 가져 오는 위치)에서 테이블에 SELECT INTO를 수행합니다 (이 작업을 수행하면 삭제됨). 이것은 당신을위한 구조를 만들 것입니다.
  • 새 쿼리 창에 CREATE로 스크립트를 수행하십시오.
  • 불필요한 열을 제거하십시오. 나머지 열을 1 라이너로 포맷하고 열 목록으로 붙여 넣습니다.
  • 작성한 테이블을 삭제하십시오.

끝난...

이것은 우리에게 많은 도움이되었습니다.


1

개체 탐색기에서 테이블을 마우스 오른쪽 버튼으로 클릭하고 상위 1000 개 행 선택

*가 아닌 모든 열을 나열합니다. 그런 다음 원하지 않는 열을 제거하십시오. 직접 입력하는 것보다 훨씬 빠릅니다.

그런 다음 이것이 너무 많은 일이라고 생각되면 Red Gate의 SQL 프롬프트를 얻고 tbl에서 ssf를 입력하고 *로 이동하여 탭을 다시 클릭하십시오.


1

이 경우에 내가 자주 사용하는 것 :

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)

@colnames ~처럼 보인다 column1,column2,column5


1

때로는 같은 프로그램이 다른 데이터베이스 구조를 처리해야하는 경우가 있습니다. 따라서 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

질문 / 문제를 정교화 / 명확하게 고려하십시오.
badfilms

1

나는이 질문이 오래되었다는 것을 알고 있지만 이것이 여전히 도움이되기를 바랍니다. 대답은 SQL Server 포럼 의 토론에서 영감을 얻었습니다 . 이것을 스토어드 프로 시저로 만들 수 있습니다 . 필드를 제외하고 둘 이상을 추가하도록 수정할 수도 있습니다.

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

0

이렇게하는 것이 더 간단하지 않습니까?

sp_help <table_name>

- '열 _ 이름'열을 클릭하십시오.> 복사> (수직 목록 작성) 새 쿼리 창에 붙여 넣고 각 열 값 앞에 쉼표를 입력하십시오 ... 원치 않는 열을 주석 처리하십시오 ... 훨씬 적습니다. 여기에 제공되고 여전히 관리 가능한 코드보다 입력하십시오.


"여기에 제공된 코드보다 입력이 훨씬 적습니다."열 노드를 쿼리 편집기 나 목록을 가져 오는 다른 우수한 방법으로 끌어 오는 것보다 훨씬 번거 롭습니다. 열이 많은 열이있는 테이블은 어떻습니까?
underscore_d

0

devart.com에서 SQL Complete를 얻을 수 있습니다. 이것은 Red Gate의 SQL Prompt와 마찬가지로 * 와일드 카드를 확장 할뿐 아니라 (cairnz의 답변에 설명 된대로) 모든 항목을 확인할 수있는 확인란이있는 열 선택기 드롭 다운을 제공합니다. 선택 목록에서 원하는 열이 자동으로 삽입됩니다 (열을 선택 취소하면 선택 목록에서 자동으로 제거됨).


0

SSMS에는 IntelliSenseAliasing을 사용하는 더 쉬운 방법이 있습니다. 이 시도

  1. 텍스트 편집기에서 마우스 오른쪽 버튼을 클릭하고 IntelliSense 가 활성화되어 있는지 확인하십시오 .
  2. 별명을 사용하여 조회를 입력하십시오 . [SELECT t. * FROM tablename t].
  3. 텍스트 이동 *. t을 하고 삭제 *을 의 열 및 SSMS 의지 자동 목록 F 별칭 테이블을.
그런 다음 SSMS를 사용하여 선택을 다른 스크립트에 쓰지 않고 더 많은 복사 / 붙여 넣기 작업을 수행 할 필요가없는 열만 빠르게 지정할 수 있습니다 . 나는 이것을 항상 사용합니다.


열 제외에 대한 답변을 지정할 수 있습니까?
Kamiccolo

@Kamiccolo-DuckWork가 설명하는 것은 수동 작업입니다. 원하는 열 이름 잘라 내기 및 붙여 넣기 그는 이것이 많은 타이핑없이 더 쉽게 이름을 얻는 방법이라고 말하고 있습니다. "이 열 제외"라는 쿼리를 작성하는 데 도움이되지 않습니다. 원하는 열 목록을 만든 다음 쿼리에 붙여 넣는 데 도움이됩니다.
ToolmakerSteve
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.