好比我有4个表T1,T2,T3,T。T1 T2 T3 结构是一样的。都有c1和c2列。数据假设也一样(实际上不一样的,这里为了方便描述)如下:   
c1         c2   
-----------------   
1         data1   
2         data2   
3         data3   T中包含2列如下:   
name       type 
------------   
T1               x 
T2               y 
T3               z 
------------ 那么,如何构造SQL语句,才能把这4个表的内容组合查询出来,得到如下结果:   
name     type       c1       c2   
-----------------------------   
T1           x           1         data1   
T1           x           2         data2   
T1           x           3         data3   
T2           y           1         data1   
T2           y           2         data2   
T2           y           3         data3   
T3           z           1         data1   
T3           z           2         data2   
T3           z           3         data3   T1,   T2,   T3是动态在T中的。不是固定的。   
写SQL语句之前并不知道T里有什么内容。只知道T表的名称、结构。以及T1,t2,...Tn的结构。 注明一下,不能用动态SQL语句,因为我要最终要生成视图的。

解决方案 »

  1.   

    --这样OK没
    declare @s nvarchar(4000)select @s=isnull(@s+' union all ','')+'select  [Name]='+quotename(Name,'''')+',[type]='+quotename(Type,'''')+',* from ' +quotename(Name)
    from T exec ('create view test as '+@s+' order by Name,type')--这里改就行了。。生成test视图 
      

  2.   

    不排除手误CREATE PROC myPROC
    AS
    BEGIN
    DECLARE @s VARCHAR(8000)
    SELECT @s=ISNULL(@s + ' UNION ALL SELECT ','SELECT ') + 'Name=''' + Name + ''', Type=''' + type + ''',* FROM ' + Name FROM t
    EXEC(@s)
    END
    GOCREATE VIEW myVIEW
    AS
    SELECT a.*
    FROM OPENROWSET('MSDASQL',
       'DRIVER={SQL Server};SERVER=(local);UID=sa;PWD=密码',
       'EXEC 库名.dbo.myPROC') AS a
    GO
    SELECT * FROM myVIEW
    GO
      

  3.   

    那么,有没有什么语句可以获取当前查询的表的名字
    好比
    select func(XXXXX) from table这样可以定义一函数func()里面可以输入表名作为参数,输出xyz之类的。