2010-09-06 31 views

Respuesta

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

No hay manera más fácil de hacer esto (posiblemente por diseño): necesita mencionar específicamente cada una de las columnas que desea recuperar.

Aunque es una tarea difícil de escribir, esto es realmente una buena cosa: se desaconseja usar SELECT * en el código de producción (tanto por razones de rendimiento como de mantenimiento); consulte, por ejemplo, this question.

6

El lenguaje de consulta de bases de datos relacionales Tutorial D permite que una proyección se exprese en términos de los atributos que se eliminarán usando ALL BUT, sin embargo, no existe una sintaxis equivalente en SQL que le permita hacer esto. Necesita enumerar explícitamente los específicos que desea.

Puede usar una Vista si necesita comúnmente este mismo conjunto de columnas.

2

No puede.

En teoría, es posible involucrar a SQL dinámico aquí - algún procedimiento se bucle a través de todas las columnas de la tabla (como, all_tabs_columns vista de diccionario en Oracle enumera todas las columnas de todas las tablas), y formar hasta que una consulta de select c1, c2 c3 ... c99 from tab, pero te desaliento fuertemente de hacer esto. Le ahorrará varias líneas de código, pero lo hará difícil de mantener. :)

1

Pruebe esto.

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

Debes agregar algunos meta texto – keyser

Cuestiones relacionadas