0

atableを(データをコピーせずに)複製してから、別のファイルグループに移動する必要があります。次のようなもの(これは私には機能しません)。

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

4 に答える 4

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 に答える
1

SELECT INTOメソッドは、制約も外部キーもインデックスも新しいテーブルに複製しません。これを行うには、かなりの努力が必要です。

別の戦略は、宛先ファイルグループでテーブルのクラスター化インデックスを再構築することにより、テーブルのメインデータのみを移動することです。

于 2015-03-04T15:27:26.620 に答える
0

あなたはそれをこのように書くべきです:

INSERT INTO NewTable
SELECT * FROM oldTable WHERE 1 = 0

クエリで記述した式は1 = 0常にfalseであるため、2番目のSELECTステートメントから行が返されないことに注意してください。したがって、これにより、クエリのSELECT句の列に基づいて空のテーブルが作成され、2番目のテーブルから新しく作成されたテーブルにデータがコピーされません。WHEREデータもコピーするには、句に真の式を指定する必要があります。たとえば、 WHERE 1 = 1

于 2012-09-21T11:56:07.340 に答える
0

これを使用して、データなしで新しいテーブルを作成します。

SELECT TOP 0 * INTO NewTable FROM OldTable

データも必要な場合は、TOP0を削除します。その後、新しいテーブルで何でもできます。

于 2014-03-06T13:40:55.780 に答える