是否可以在 select 中多次使用动态列?

Is it possible to use dynamic columns multiple times in a select?

我有一些复杂的字符串替换,我只允许只读访问。

我想要几列,每列都依赖于前一列,这样我就可以查看我的 substringcharindex 函数是否正确。

基本上是这样的:

DECLARE @myvar NVARCHAR(100) = 'ThisIsMyTest'

SELECT REPLACE(@myvar, 'My', 'Our') AS Part1
    ,Part1 + ' added to the end'

我希望第二列的输出是:

ThisIsOurTest added to the end

这是我想要完成的一个极其简化的版本,所以我正在寻找这个概念。我不需要这个答案:

SELECT REPLACE(@myvar, 'My', 'Our') as Part1, REPLACE(@myvar, 'My', 'Our') + ' added to the end'

因为这就是我现在正在做的事情。

在SQL服务器中,一个选项使用横向连接。它们在这种情况下很方便,因为“下一个”连接可以访问前一个连接生成的数据集。基本上,您可以将每个中间计算放在一个单独的(标量)子查询中。

从您的简化示例开始,这将是:

select t1.part1, t2.part2
from (values (replace(@myvar, 'My', 'Our'))) t1(part1)
cross apply (values (t1.part1 + ' added to the end')) t2(part2)