如题。
declare   @table table(id int,Name char(50)) 
insert @table values(12,'aaaaaaaaaaa')
insert @table values(5362,'bbbbbbbbbbbb')
insert @table values(333,'eeeeeeeee')
insert @table values(444,'tqqqqqqqqqqqq')
with aaa as(
select * from @table
)
select * from aaa
select count(1) from aaaaaa  如何才能多次使用?

解决方案 »

  1.   

    with 表达式只能在后面的sql里,你可以改为临时表
    select * into #tb from @table
      

  2.   

    mssql 2005的用法,名称是公用表表达式(commot-table-expression),with里的查询相当于临时表
      

  3.   

    with ...as 只能用一次 要多次使用还是用临时表。
      

  4.   


    USE AdventureWorks;
    GO
    WITH DirReps(ManagerID, DirectReports) AS 
    (
        SELECT ManagerID, COUNT(*) 
        FROM HumanResources.Employee AS e
        WHERE ManagerID IS NOT NULL
        GROUP BY ManagerID
    )
    SELECT ManagerID, DirectReports 
    FROM DirReps 
    ORDER BY ManagerID;
    GO
      

  5.   


    生成臨時表,或用表變量存儲,CTE不可生成多個結果集
      

  6.   


    只能想办法写在一个CTE的语法中,然后处理这个数据集合
    insert @table values(12,'aaaaaaaaaaa')
    insert @table values(5362,'bbbbbbbbbbbb')
    insert @table values(333,'eeeeeeeee')
    insert @table values(444,'tqqqqqqqqqqqq')
    ;WITH aa(id, name) AS 
    (
        SELECT ID,name
        FROM @table
    )
    SELECT *,count=(select COUNT(1) from aa)
    FROM aa