2013-07-26 13 views
7

Posso selezionare colonne specifiche per il numero delle colonne in SQL? Qualcosa comesql server seleziona la colonna per numero

SELECT columns(0), columns(3), columns(5), columns(8) FROM TABLE 

Grazie

+2

Controllare http://stackoverflow.com/questions/368505/is-it-possibile-per-select-sql-server-data-using-column-ordinal-position –

+1

Dai un'occhiata a questa risposta per, beh, la tua risposta http://stackoverflow.com/a/4883109/1504882 – Elias

+0

ecco una domanda simile alla tua domanda con risposta perfetta: http://stackoverflow.com/questions/4882837/access-columns-of-a-table-by- index-invece-of-name-in-sql-server-stored-procedur – Karamafrooz

risposta

3

Hai utilizzare SQL dinamico per eseguire questa operazione:

DECLARE @strSQL AS nvarchar(MAX) 
DECLARE @strColumnName AS nvarchar(255) 
DECLARE @iCounter AS integer 
DECLARE @curColumns AS CURSOR 


SET @iCounter = 0 
SET @strSQL = N'SELECT ' 

SET @curColumns = CURSOR FOR 
(
    SELECT * FROM 
    (
     SELECT TOP 99999 
      COLUMN_NAME 
     FROM INFORMATION_SCHEMA.COLUMNS 
     WHERE TABLE_NAME = 'T_Markers' 
     AND ORDINAL_POSITION < 4 
     ORDER BY ORDINAL_POSITION ASC 
    ) AS tempT 
) 

OPEN @curColumns 
FETCH NEXT FROM @curColumns INTO @strColumnName 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    -- PRINT @strColumnName 
    IF @iCounter = 0 
     SET @strSQL = @strSQL + N' 
    [' + @strColumnName + N'] ' 
    ELSE 
     SET @strSQL = @strSQL + N' 
    ,[' + @strColumnName + N'] ' 
    SET @iCounter = @iCounter + 1 
FETCH NEXT FROM @curColumns INTO @strColumnName 
END 
CLOSE @curColumns 
DEALLOCATE @curColumns 

SET @strSQL = @strSQL + N' 
FROM T_Markers 
' 

PRINT @strSQL 
5
SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = 'myTable' AND ORDINAL_POSITION = '3' 

Questa istruzione restituisce la terza colonna della tabella

Si avrebbe bisogno di scrivere una dichiarazione Transact-SQL come

DECLARE @columnname nvarchar(100), @sql nvarchar(500) 

SELECT @columnname = ORDINAL_POSITION FROM INFORMATION_SCHEMA.COLUMNS 
      WHERE TABLE_NAME = 'myTable' AND ORDINAL_POSITION = '3' 

SET @sql = 'SELECT ' + @columnname + ' FROM mytable' 

EXEC @sql 
4

Consiglio vivamente contro risposte così complicate.

Come altri già sottolineato qui sotto la tua domanda, si dovrebbe verificare questa risposta invece:

Access columns of a table by index instead of name in SQL Server stored procedure

La specifica SQL non è costruito per lo schema dinamico eiher in DDL o DML .

Accettarlo e non utilizzare i numeri per le colonne in SELEZIONA. Sarà meno performante, meno leggibile e ovviamente fallirà se cambi lo schema.

-2

In MySQL è possibile utilizzare

SELECT * FROM mytable LIMIT 2,1; 

2 = il numero di riga che si desidera avviare.

1 = numero di righe da selezionare a partire dal numero precedente.

Spero sia stato utile.

+0

LIMIT controlla il numero di righe restituite, non la colonna. – Robert

Problemi correlati