2011-03-21 56 views
104

只是例如我可以使用多个“with”吗?

With DependencedIncidents AS 
(
    SELECT INC.[RecTime],INC.[SQL] AS [str] FROM 
    (
     SELECT A.[RecTime] As [RecTime],X.[SQL] As [SQL] FROM [EventView] AS A 
     CROSS JOIN [Incident] AS X 
      WHERE 
       patindex('%' + A.[Col] + '%', X.[SQL]) > 0 
    ) AS INC 
) 

With lalala AS 
(
    SELECT INC.[RecTime],INC.[SQL] AS [str] FROM 
    (
     SELECT A.[RecTime] As [RecTime],X.[SQL] As [SQL] FROM [EventView] AS A 
     CROSS JOIN [Incident] AS X 
      WHERE 
       patindex('%' + A.[Col] + '%', X.[SQL]) > 0 
    ) AS INC 
) 

不起作用。 “错误附近”。

另外我想先使用里面第二个。是真的还是我需要使用临时表?

+1

BOL也具有确切的语法。 http://msdn.microsoft.com/en-us/library/ms175972%28v=SQL.100%29.aspx注意'[,... n]'。 – 2011-03-21 09:22:06

回答

180

尝试:

With DependencedIncidents AS 
(
    SELECT INC.[RecTime],INC.[SQL] AS [str] FROM 
    (
     SELECT A.[RecTime] As [RecTime],X.[SQL] As [SQL] FROM [EventView] AS A 
     CROSS JOIN [Incident] AS X 
      WHERE 
       patindex('%' + A.[Col] + '%', X.[SQL]) > 0 
    ) AS INC 
), 
lalala AS 
(
    SELECT INC.[RecTime],INC.[SQL] AS [str] FROM 
    (
     SELECT A.[RecTime] As [RecTime],X.[SQL] As [SQL] FROM [EventView] AS A 
     CROSS JOIN [Incident] AS X 
      WHERE 
       patindex('%' + A.[Col] + '%', X.[SQL]) > 0 
    ) AS INC 
) 

是的,你可以参考通用表公用表表达式定义中的表达式。即使是递归的。这导致一些非常neat tricks

+3

对于那些没有立即注意到它的人来说,这里的catch就是在原来的声明之后添加一个逗号..大声笑 – CRSouser 2017-09-24 15:35:16

67

是 - 只是这样来做:

WITH DependencedIncidents AS 
(
    .... 
), 
lalala AS 
(
    .... 
) 

您不需要重复WITH关键字

+7

简单而直接 – MDMalik 2013-10-01 10:55:41

+3

lalala能否使用DependencedIncidents? – Bren 2016-04-04 23:58:40

+2

@Bren:是的,当然 – 2016-04-05 04:35:13

相关问题