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
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
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
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
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.
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.
LIMIT controlla il numero di righe restituite, non la colonna. – Robert
Controllare http://stackoverflow.com/questions/368505/is-it-possibile-per-select-sql-server-data-using-column-ordinal-position –
Dai un'occhiata a questa risposta per, beh, la tua risposta http://stackoverflow.com/a/4883109/1504882 – Elias
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