复制表并将其移动到不同的文件组

时间:2012-09-21 11:51:30

标签: sql sql-server

我需要复制一个表(不复制数据),然后将其移动到不同的文件组。像下面的东西(这对我不起作用)。

SELECT * INTO NewTable ON [FG_newFilegroup] FROM oldTable WHERE 1=0 

4 个答案:

答案 0 :(得分:1)

您可以在select into之前更改默认文件组,然后在以下位置重置:

select 41 as i into newtable1
alter database test modify filegroup [secondary] default
select 41 as i into newtable2
alter database test modify filegroup [primary] default

select  t.name as TableName
,       f.name as Filegroup
from    sys.tables t
join    sys.indexes i
on      t.object_id = i.object_id
join    sys.filegroups f
on      f.data_space_id = i.data_space_id
where   t.name like 'newtable%'

打印:

TableName   Filegroup
newtable1   PRIMARY
newtable2   SECONDARY

答案 1 :(得分:1)

SELECT INTO方法不会将约束,外键或索引复制到新表。 要做到这一点是一项重大的努力。

另一种策略是通过重建目标文件组上表的聚簇索引来仅移动表的主数据。

答案 2 :(得分:0)

你应该这样写:

INSERT INTO NewTable
SELECT * FROM oldTable WHERE 1 = 0

请注意,您在查询1 = 0中编写的表达式始终为false,因此不会导致从第二个SELECT语句返回任何行。因此,这将导致基于查询的SELECT子句中的列创建一个空表,并且它不会将第二个表中的数据复制到新创建的表中。要复制数据,您需要在WHERE子句中提供真正的表达式,例如WHERE 1 = 1

答案 3 :(得分:0)

使用此选项创建一个没有数据的新表:

SELECT TOP 0 * INTO NewTable FROM OldTable

如果您还想要数据,请删除 TOP 0 。 在那之后你可以用新表做任何事情。