Как выбрать значение столбца таблицы SQL, указав индекс столбца? - PullRequest
0 голосов
/ 09 декабря 2011

У меня есть таблица с 3 столбцами.Один из них Id, второй столбец Name и третий Description.Как выбрать значение в поле Description, указав индекс столбца 3?

Заранее спасибо

Ответы [ 5 ]

2 голосов
/ 09 декабря 2011

Вы не можете, из простого SQL (кроме как в предложении ORDER BY, которое не даст вам значение, но позволит вам отсортировать набор результатов по нему).

Если вы используете другой язык программирования для построения динамического запроса, вы можете использовать его для идентификации столбца, выбранного по его порядковому номеру.

В качестве альтернативы, вы можете параметризовать свой запрос, чтобы он возвращал определенный столбец на основе оператора case - например, так:

select a, b, c, d, e, ...,
       case ?
           when 1 then a
           when 2 then b
           when 3 then c
           when 4 then d
           when 5 then e
           ...
       end as parameterised_column
from ...
1 голос
/ 09 декабря 2011

Проблема со ссылкой на столбец по номеру индекса состоит в том, что однажды кто-то может добавить столбец и сломать ваше приложение, поскольку будет возвращено неправильное значение.

Этот принцип применяется в SQL, потому чтоВы можете выбрать именованные столбцы или все столбцы, используя синтаксис *.

Этот принцип не применяется в языках программирования, где вы обычно можете получить доступ к столбцу по порядковому номеру в коде, но вы должны рассмотреть этот принцип, прежде чем принять решение оиспользуйте оператор, такой как (псевдо-код)

value = results[0].column[2].value;
0 голосов
/ 16 сентября 2013

Вот как вы можете получить имя столбца, передав его индекс.Здесь переменная AcID используется в качестве индекса столбца.Ниже приведен код, например

    dim gFld as string

    vSqlText1 = "Select * from RecMast where ID = 1000"
    vSql1 = New SqlClient.SqlCommand(vSqlText1, cnnRice)
    vRs1 = vSql1.ExecuteReader

    if vRs1.Read then
        gFld = vRs1.GetName(AcID)
        msgbox gfld
    end if
0 голосов
/ 17 августа 2012

Это должно быть возможно. Вам нужно запросить системные таблицы (которые различаются в разных версиях SQL), чтобы получить имя 3-го (или N-го) столбца в виде строки, чтобы сформировать следующий запрос с использованием этого имени столбца.

В SQL 2000 таблицы, с которых нужно начинать, являются syscolumns с объединением sysobjects для имени таблицы. Тогда функция rank () в «Colid» даст вам N-й столбец и «name» (шокирующе) имя столбца. Как только вы получите это значение в переменной, следующая команда может вернуть значение, сравнить его, упорядочить по нему или что вам нужно.

0 голосов
/ 09 декабря 2011
declare @searchIndex int
set @searchIndex = 3
select Description from tbl_name t where t.Id = @searchIndex
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...