如何通过给出列索引来选择sql表的列值?

时间:2011-12-09 10:04:33

标签: sql indexing

我有3列的表格。一个是Id,第二列是Name,第三列是Description。如何通过给出列索引3?

来选择Description字段中的值

提前致谢

5 个答案:

答案 0 :(得分:2)

你不能,从普通的SQL(除了在ORDER BY子句中,它不会给你值,但允许你对它的结果集进行排序)。

如果您正在使用其他编程语言来构建动态查询,则可以使用它来标识由其索引号选择的列。

或者,您可以参数化查询以根据案例语句返回特定列 - 如下所示:

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 :(得分:1)

通过索引号引用列的问题是,有一天,有人可能会添加一个列并破坏您的应用程序,因为将返回错误的值。

此原则在SQL中强制执行,因为您可以使用*语法选择命名列或所有列。

这个原则并没有在编程语言中强制执行,你通常可以在代码中按顺序访问列,但在决定使用诸如(伪代码)之类的语句之前你应该考虑原则

value = results[0].column[2].value;

答案 2 :(得分:0)

应该可以。您必须查询系统表(从一个版本的SQL到另一个版本不同)以获取第3(或第N)列名称作为字符串,以使用该列名称形成以下查询。

在SQL 2000中,您需要开始使用的表是syscolumns,它们与表名称的sysobjects连接。然后“Colid”上的rank()函数将为您提供第N列和“名称”(令人震惊地)列的名称。一旦你在变量中得到了它,下面的命令可以返回值,与之比较,按它排序或者你需要的任何值。

答案 3 :(得分:0)

这是通过传递它的索引来检索列名的方法。 这里变量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

答案 4 :(得分:-1)

declare @searchIndex int
set @searchIndex = 3
select Description from tbl_name t where t.Id = @searchIndex