How to exclude a column from a SELECT query?

I have 100 columns in a table and I want to list 99 columns except a specific one.

How to exclude this column name?

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

There is no simpler way to do this (perhaps by design): you need to specifically specify each of the columns that you want to get.

Although it’s a hassle to write, it’s actually a good thing: use SELECT *in production code is discouraging (both for performance and ease of maintenance) - see, for example, this question .

+6
source

Tutorial D , ALL BUT SQL , . , .

, .

+6

.

, sql - - (, all_tabs_columns Oracle ) select c1, c2 c3 ... c99 from tab, . , .:)

+2

.

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
+1

! , . , .

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;
+1

All Articles