5

すべてのオブジェクトとデータを含む SQL Server データベースをバックアップしたいのですが、すべてのテーブルのデータはテーブルごとに 100 行に制限する必要があります。mysql ではこれを非常に簡単に行うことができますが、SQL Server では方法がわかりません??

4

3 に答える 3

5

これには明示的なものを実際に使用することはできません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 行未満の小さなテーブルの場合)。

于 2012-06-06T12:45:36.313 に答える
0

この解決策を試してみてください

  1. データベースのコピーを作成してください

  2. 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 ? 制約をすべてチェック'

  3. 新しいデータベースをバックアップします。

制限 : 制約を無効にしてデータベースから行を削除するため、バックアップされたデータベースのデータの整合性に問題があります。

于 2012-06-06T13:59:26.940 に答える
0

SQL Server では、ツール "bcp" を使用します。

ただし、これには少しコーディングが必要です。各テーブルの上位 100 の選択ステートメントを生成し、バッチ ファイルを作成します。

于 2012-06-06T11:30:26.890 に答える