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 (
...
)
给定以下 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 (
...
)