0

我需要复制 atable (不复制数据),然后将其移动到不同的文件组。类似于以下内容(这对我不起作用)。

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

4 回答 4

1

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

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

于 2015-03-04T15:27:26.620 回答
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
于 2012-09-21T11:54:53.983 回答
0

使用它来创建一个没有数据的新表:

从 OldTable 中选择 TOP 0 * INTO NewTable

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

于 2014-03-06T13:40:55.780 回答
0

你应该这样写:

INSERT INTO NewTable
SELECT * FROM oldTable WHERE 1 = 0

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

于 2012-09-21T11:56:07.340 回答