我可以在SQL Server和进程中使用View中的Alias吗?

时间:2018-04-13 18:37:55

标签: sql-server sql-server-2008 tsql

我可以在SQL Server中使用View中的Alias并在其中处理吗?

例如,我有:

select dbo.DateToShamsi(dbo.Health_Komak2.CDate) as HK2Hijri .....
我可以使用:

select dbo.DateToShamsi(dbo.Health_Komak2.CDate) as HK2Hijri , SUBSTRING(----->HK2Hijri, 1, 4) 

如果不能我怎么做?

2 个答案:

答案 0 :(得分:4)

  

我可以在SQL Server中使用View中的Alias并在其中处理吗?

不,解释All-at-Once Operations in T-SQL

  

无效的列名称“Corrected FirstName”。

     

此错误消息表示我们无法在SELECT子句中的下一列表达式中使用别名。 在查询中我们创建了一个更正的名字,我们希望在下一列中使用它来生成全名,但是All-at-Once操作概念告诉我们你不能这样做,因为同一个逻辑查询中的所有表达式处理阶段(此处为SELECT)在逻辑上同时进行评估。

您可以使用OUTER APPLY

SELECT s.HK2Hijri, LEFT(s.HK2Hijri, 4)
FROM dbo.Health_Komak2 k
OUTER APPLY (SELECT dbo.DateToShamsi(k.CDate) AS HK2Hijri) s

答案 1 :(得分:4)

不,但您可以使用子查询,CTE或横向连接来执行此操作。让我展示后者,这是最有趣的选择:

select v.HK2Hijri, substr(v.HK2Hijri, . . .
from dbo.Health_Komak2 hk outer apply
     (values (dbo.DateToShamsi(hk.CDate))
     ) v(HK2Hijri);

应用非常方便,因为您可以定义多个别名。您还可以多次使用apply对先前定义的别名执行操作。