我需要复制一个表(不复制数据),然后将其移动到不同的文件组。像下面的东西(这对我不起作用)。
SELECT * INTO NewTable ON [FG_newFilegroup] FROM oldTable WHERE 1=0
答案 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 。 在那之后你可以用新表做任何事情。