在另一个查询中使用查询表名

时间:2014-06-12 02:49:22

标签: sql sql-server partition

我试图查询具有奇怪手动分区方案的数据库。数据库有一个分区表,定义为:

CREATE TABLE [dbo].[partitions](
    [pname] [varchar](255) NULL,
    [drvid] [int] NULL,
    [start_time] [bigint] NULL,
    [end_time] [bigint] NULL,
    [blocksize] [int] NULL,
    [flags] [int] NULL
)

然后是几个与表名相同的表。

(sql_data_1_2014_05, sql_data_1_2014_06, etc.)

所以我希望能够编写一个视图,将所有表格与一个联合组合在一起,但我不知道如何从分区表中提取表名并使用它在我的查询...所以有点像下面但在一个循环拉表名称我们的分区表。

SELECT
     ....
FROM dbo.sql_data_1_2014_05

    UNION ALL

SELECT
    ....
FROM dbo.sql_data_1_2014_05

此外,我甚至不知道这是否是最快/最有效的方法。这些表非常大,因此对它们进行了分区。任何指针/想法?

1 个答案:

答案 0 :(得分:2)

您可以为每个表构建一个动态SQL字符串,但是应该您在声称大量的表上执行此操作吗?我不知道...

declare @sql nvarchar(max), @pname nvarchar(max)

set @sql=''

declare pname cursor local
for
select distinct pname from partitions
open pname
fetch next from pname into @pname
while @@fetch_status = 0
begin
  set @sql = @sql + 'select col1, col2, col3 from ' + @pname + ' union all '
  fetch next from pname into @pname
end

set @sql = left(@sql,len(@sql)-10)
select @sql

SQLFiddle here.

而不是SELECT @SQL,您需要更改为EXEC SP_EXECUTESQL @SQL才能运行它。

作为测试,您可以将生成的字符串复制到新窗口进行测试。