SQL语句查询结果作为第二个语句的表格

有几百个表格,其中有一个主表是存放其它表格名字的,怎么通过查询主表后得出表名 然后再去查询数据
以下用几个表格做个测试(tablemain、table1、table2、table3)
tablemain

table1

table2

table3

问题点:要查出tablemain中state=‘start’中的表格 有哪些人名(name)和编号(no)
因为表格是有几百个的,事先不可能知道是要查询哪个表格

希望各位不要给出 select * from table1之类的 因为在运用中不会适用的
谢谢

--创建测试表 这里需要问一下你后面你筛选的name 和no 的列名有1,2,3吗?
CREATE TABLE #T
    (
      name VARCHAR(20) ,
      no VARCHAR(10)
    )
    
DECLARE @name VARCHAR(20)= '' 
DECLARE @str NVARCHAR(100)
  
--创建游标
DECLARE cursor_tb CURSOR FAST_FORWARD
FOR
    ( SELECT    tablename
      FROM      tablemain
    )
OPEN  cursor_tb
FETCH NEXT FROM cursor_tb
 INTO @name

WHILE @@FETCH_STATUS = 0
    BEGIN 
      SELECT  @str = 'select name,no from '
                + QUOTENAME(@name)
         INSERT INTO #T EXEC(@sql);
      
        FETCH NEXT FROM cursor_tb
        INTO @name
    END
    
 
CLOSE cursor_tb
DEALLOCATE cursor_tb
        
        
SELECT  *
FROM    #T
 --删除临时表
DROP TABLE #T

追问

name和no不一定相同
要求是一句查询语句哦

追答

你没有看到我回答前面的提问吗?列名称是不是1,2,3,如果是1,2,3,那么截取@name最后面一个字符拼接上去, 如果不是有什么规律?(比如只有2列,或者列名称中包含某些固定字符或者是数据类型是唯一的等等到管理表中去查找出这些列)

另外你建立一个存储过程把这些信息存储进去,用一条语句调用,你又不是在考试

追问

程序就是要求执行一个语句 然后得出结果
我不只是在数据库查资料 要放到程序代码中执行的

追答

你的程序可以调用存储过程吗?

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-04-21
什么意思?不太明白,查询出start的表比如说有两个,程序中拼sql
select * from table union all select * from table2
这样?不过你这种设计数据库也是醉了?为什么这设计追问

用别人家的框架 自带的数据库就是这样了
你的写法不适用啊 你这是事先知道表名的写法 我有好几百个表格的 查询的状态也有好几十种

追答

事先不知道表名啊,表名是查出来的拼接sql

追问

运行你语句得到这样的结果 不对了

tablemain的字段tablename存的是表名  我要查询tablemain中state=‘start’的表格的内容name? 和 no?  

注意: 各表格中的name?和no?是不相同的

追答

字段不固定?有对应的配置还是看你这个有规则?也是查出来,或者是按照规则拼接sql查询的字段,name1 name2 都as成name不就行了,按照我那个sql应该是你的第二三两个图合起来,不知道你怎么弄的了

追问

我想我看懂你的查询语句什么意思了
你是看见state='start'的有table1和table3
所以用select * from table1 union all select * from table3 ??? 是这样吗?

假如你是这样的思路可不行,我是有好几百个表格的

相似回答