我试图查询具有奇怪手动分区方案的数据库。数据库有一个分区表,定义为:
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
此外,我甚至不知道这是否是最快/最有效的方法。这些表非常大,因此对它们进行了分区。任何指针/想法?
答案 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
而不是SELECT @SQL
,您需要更改为EXEC SP_EXECUTESQL @SQL
才能运行它。
作为测试,您可以将生成的字符串复制到新窗口进行测试。