すべてのオブジェクトとデータを含む SQL Server データベースをバックアップしたいのですが、すべてのテーブルのデータはテーブルごとに 100 行に制限する必要があります。mysql ではこれを非常に簡単に行うことができますが、SQL Server では方法がわかりません??
3 に答える
これには明示的なものを実際に使用することはできませんBACKUP DATABASE
。ただし、このようなことを行うこともできますが、私のコメントのように、順序が比較的恣意的であり、すべてが 1:1 でない限り、何らかのデータ整合性に依存している場合、このデータの使用は制限されることに注意してください。そして、たまたますべてのクエリで魔法のように便利な並べ替えが行われ、データの膨大な寄せ集めになります。
CREATE DATABASE copy_of_original;
GO
USE original_db;
GO
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'';
-- this assumes all tables are in `dbo` schema:
SELECT @sql = @sql + CHAR(13) + CHAR(10)
+ 'SELECT TOP (100) * INTO copy_of_original.dbo.'
+ QUOTENAME(name) + ' FROM dbo.' + QUOTENAME(name) + ';'
FROM sys.tables
WHERE schema_id = 1;
PRINT @sql;
-- EXEC sp_executesql @sql;
これが完了したら、バックアップできますがcopy_of_original
、元のデータベースに存在するインデックスや制約はまったくなく、TOP
各テーブル (またはテーブル全体) から任意の 100 行のセットが選択されることに注意してください。 、100 行未満の小さなテーブルの場合)。
この解決策を試してみてください
データベースのコピーを作成してください
DB コピーで以下のコードを実行して、100 行を超えるテーブルから行を削除します。
sp_msforeachtable
'ALTER TABLE ? NOCHECK CONSTRAINT ALL ;WITH [DUMMYTABLE] AS (SELECT RN = ROW_NUMBER() OVER (ORDER BY NEWID()), * FROM ?) DELETE FROM [DUMMYTABLE] WHERE RN > 100 ALTER TABLE ? 制約をすべてチェック'新しいデータベースをバックアップします。
制限 : 制約を無効にしてデータベースから行を削除するため、バックアップされたデータベースのデータの整合性に問題があります。
SQL Server では、ツール "bcp" を使用します。
ただし、これには少しコーディングが必要です。各テーブルの上位 100 の選択ステートメントを生成し、バッチ ファイルを作成します。