在SQL Server存储过程中按索引而不是名称访问表的列

有没有办法在sql Server的存储过程中通过索引访问列?

目的是计算大量列.我正在阅读游标,但我不知道如何应用它们.

让我解释一下我的问题:

我有一排像:

field_1 field_2 field_3 field_4 ...field_d  Sfield_1 Sfield_2 Sfield_3...Sfield_n
1       2       3       4          d        10       20       30         n

我需要计算像(field_1 * field1) – (Sfield_1 * Sfiled_1)/更多…

因此结果存储在表格列中d次.

所以结果是一个d列* d行表.

由于列数是可变的,我正在考虑制作动态sql,在字符串中获取列的名称并拆分我需要的列,但这种方法使问题更难.我认为按索引获取列数可以使生活更轻松.

解决方法

首先,如 OMG Ponies所述,您不能按其序号位置引用列.这不是意外. sql规范不是为DDL或DML中的动态模式构建的.

鉴于此,我不得不想知道为什么你的数据结构如你所知.当您尝试提取信息时,架构和问题域之间不匹配的迹象会自行显示.当查询的编写非常繁琐时,表明模式没有正确地为其设计的域建模.

但是,尽管如此,根据你告诉我们的情况,另一种解决方案如下:(我假设field_1 * field1意味着field_1 * field_1或field_1平方或Power(field_1,2) ))

Select 1 As Sequence,field_1 As [Field],Sfield_1 As [SField],Sfiled_1 As [SFiled]
Union All Select 2,field_2,Sfield_2,Sfiled_2
...
Union All Select n,field_n,Sfield_n,Sfiled_n

现在您的查询如下:

With Inputs As
    (
    Select 1 As Sequence,Sfiled_1 As [SFiled]
    Union All Select 2,Sfiled_2
    ....
    ),Results As
    (
    Select Case
            When Sequence = 1 Then Power( [Field],2 ) - ( [SField] * [SFiled] ) 
            Else 1 / Power( [Field],2 ) - ( [SField] * [SFiled] ) 
            End
            As Result
    From Inputs
    )
Select Exp( Sum( Log( Result ) ) )
From Results

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...