我有3列的表格。一个是Id
,第二列是Name
,第三列是Description
。如何通过给出列索引3?
Description
字段中的值
提前致谢
答案 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