SQL: 无法在 where 中使用列别名

SQL: Not being able to use column alias in where

给定以下 sql 示例程序:

DECLARE @xmlvoucherSequenceList xml = '<?xml version="1.0"?><Voucher><Id Item1="6425"/></Voucher>'

select
    col.value('./@Item1','int') voucherSequence
    from @xmlvoucherSequenceList.nodes('/Voucher/Id') t(col) 
    where voucherSequence not in (
        ...
    )

我不明白为什么“voucherSequence”别名在 sql management studio 编辑器中带有红色下划线且显示“未找到列 voucherSequence”。

如果我注释 where 部分并且 运行 仅注释 select,voucherSequence 显然显示为列名(别名)。

奇怪的是,如果我用下一个查询替换上一个查询:

select
    col.value('./@Item1','int') voucherSequence
    from @xmlvoucherSequenceList.nodes('/Voucher/Id') t(col) 
    where col.value('./@Item1','int') not in (
        ...
    )

sql 编译器不会报错并且查询工作正常,但我想在 where 中使用别名,这就是别名用于的原因。

您的代码看起来像 SQL 服务器。我会推荐:

select v.voucherSequence    
from @xmlvoucherSequenceList.nodes('/Voucher/Id') t(col) cross apply
     (values (t.col.value('./@Item1', 'int'))
     ) v(voucherSequence)
where v.voucherSequence not in (
    ...
)