0

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

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

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

4

1 回答 1

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 在这里。

而不是SELECT @SQL您想要更改EXEC SP_EXECUTESQL @SQL为运行它。

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

于 2014-06-12T03:11:32.950 回答