【发布时间】:2021-10-29 03:50:11
【问题描述】:
给定以下 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 编辑器中以红色下划线显示为“未找到列凭证序列”。
如果我注释 where 部分并只运行选择,则凭证序列清楚地显示为列名(别名)。
奇怪的是,如果我用下一个查询替换上一个查询:
select
col.value('./@Item1','int') voucherSequence
from @xmlvoucherSequenceList.nodes('/Voucher/Id') t(col)
where col.value('./@Item1','int') not in (
...
)
sql 编译器不会报错,查询工作正常,但我想在 where 中使用别名,这就是为什么 alias 的用途。
【问题讨论】:
-
这是不允许的,根据 SQL 标准。请改用 CTE、子查询或横向连接。
-
感谢@Gordon Linoff。可以举个例子吗?
标签: sql select stored-procedures alias