2012-06-06 15 views
5

Voglio il backup di un database di SQL Server con tutti gli oggetti lungo con i dati, ma i dati in tutte le tabelle dovrebbero essere limitate che è di 100 righe per ogni tabella. Posso farlo in mysql molto facilmente ma in SQL Server non so come fare ??Come eseguire il backup del database con 100 righe in ogni tabella?

Please help me out.

Grazie

Nitesh Kumar

+3

Questo non è il backup, che è l'esportazione dei dati. Lo scopo principale di Backup è il disaster recovery, non ha senso limitare il numero di record. Cosa stai cercando di realizzare? Quali comandi/strumenti hai usato con MySQL? –

+1

Mentre tecnicamente puoi farlo, come farai a utilizzare 100 righe da ogni tabella? Non c'è assolutamente alcuna integrità referenziale? (Ho il sospetto che non si poteva tirare 100 clienti e gli ordini 100 senza violare alcune integrità o la scrittura di dichiarazioni molto complesse.) –

+1

Ha senso se si dispone di un database di 10 TB e solo bisogno di una versione semplice per lavorare su di esso. E per quanto ho trovato, non esiste una soluzione semplice per SQL Server – Salim

risposta

0

Con SQL Server Vorrei utilizzare lo strumento "BCP"

Questo richiede un po 'di codifica però: la generazione del top 100 select per ogni tabella e la creazione di un file batch

3

Per questo non è possibile utilizzare un esplicito BACKUP DATABASE. Comunque potresti fare qualcosa del genere - tuttavia tieni presente che, come nel mio commento, questi dati saranno di uso limitato se ti affidi a qualsiasi tipo di integrità dei dati poiché l'ordine sarà relativamente arbitrario e a meno che tutto sia 1: 1 e vi capita di avere magicamente conveniente ordinamento su tutte le query sarà solo una massiccia miscuglio dei dati:

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; 

una volta fatto questo, è possibile il backup copy_of_original - ma tenete a mente che non avrà qualsiasi indici o vincoli presenti nel database originale, e che TOP avrà scelto un insieme arbitrario di 100 righe da ogni tabella (o l'intera tabella, per tavolini con meno di 100 righe).

0

Si può si prega di provare questa soluzione

  1. Si prega di creare una copia del database

  2. Eseguire il codice qui sotto nella vostra copia DB per eliminare le righe dalla tabella con più di 100 righe.

    sp_msforeachtable
    'ALTER TABLE? NOCHECK VINCOLO TUTTI ; CON [DUMMYTABLE] AS (? SELEZIONA RN = ROW_NUMBER() OVER (ORDER BY NEWID()), * FROM) DELETE FROM [DUMMYTABLE] WHERE RN> 100 ALTER TABLE? CHECK CONSTRAINT ALL '

  3. Eseguire il backup del nuovo database.

Limitazione:Emissione integrità dei dati del database di backup come disabilitare i vincoli e cancellare le righe dal database.

+0

Un'altra limitazione: 'ORDER BY NEWID()' sarà potenzialmente piuttosto costoso su tabelle più grandi.Non lo suggerirei a meno che non ci sia un requisito esplicito per le righe * casuali *. Inoltre, copiare solo tutti i dati per eliminarne il 90% in più non sembra un percorso efficiente (non mi piacerebbe vedere il log delle transazioni per il nuovo database quando questa operazione è finita). –

Problemi correlati