2011-03-21 8 views
104

chỉ cần ví dụTôi có thể sử dụng nhiều "bằng" không?

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 
) 

không hoạt động. "Lỗi gần với".

Ngoài ra tôi muốn sử dụng đầu tiên với thứ hai bên trong. Có thật hay tôi cần sử dụng bảng tạm thời?

+1

BOL cũng có cú pháp chính xác. http://msdn.microsoft.com/en-us/library/ms175972%28v=SQL.100%29.aspx Chú ý '[, ... n]'. –

Trả lời

180

Hãy thử:

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 
) 

Và có, bạn có thể tham khảo bảng thông thường biểu thức bên trong định nghĩa biểu thức bảng chung. Ngay cả đệ quy. Dẫn đến một số rất neat tricks.

+3

Đối với những người không nhận ra ngay lập tức nó như bản thân mình, việc bắt ở đây là thêm dấu phẩy sau bản gốc với câu lệnh .. lol – CRSouser

67

Có - chỉ làm điều đó theo cách này:

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

Bạn không cần phải lặp lại từ khóa WITH

+7

đơn giản và thẳng – MDMalik

+3

Có thể sử dụng lalala DependencedIncidents không? – Bren

+2

@Bren: vâng, tất nhiên là –