atableを(データをコピーせずに)複製してから、別のファイルグループに移動する必要があります。次のようなもの(これは私には機能しません)。
SELECT * INTO NewTable ON [FG_newFilegroup] FROM oldTable WHERE 1=0
atableを(データをコピーせずに)複製してから、別のファイルグループに移動する必要があります。次のようなもの(これは私には機能しません)。
SELECT * INTO NewTable ON [FG_newFilegroup] FROM oldTable WHERE 1=0
の前にデフォルトのファイルグループを変更し、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
SELECT INTOメソッドは、制約も外部キーもインデックスも新しいテーブルに複製しません。これを行うには、かなりの努力が必要です。
別の戦略は、宛先ファイルグループでテーブルのクラスター化インデックスを再構築することにより、テーブルのメインデータのみを移動することです。
あなたはそれをこのように書くべきです:
INSERT INTO NewTable
SELECT * FROM oldTable WHERE 1 = 0
クエリで記述した式は1 = 0
常にfalseであるため、2番目のSELECT
ステートメントから行が返されないことに注意してください。したがって、これにより、クエリのSELECT句の列に基づいて空のテーブルが作成され、2番目のテーブルから新しく作成されたテーブルにデータがコピーされません。WHERE
データもコピーするには、句に真の式を指定する必要があります。たとえば、 WHERE 1 = 1
。
これを使用して、データなしで新しいテーブルを作成します。
SELECT TOP 0 * INTO NewTable FROM OldTable
データも必要な場合は、TOP0を削除します。その後、新しいテーブルで何でもできます。