Ho trovato BCP più efficace di alcuni degli strumenti per ottenere dati in una versione precedente di SQL Server e per estrarre dati da RDS. (Grazie @ivan_posdeev.)
In primo luogo ho generato lo schema facendo clic con il pulsante destro del mouse sul database in SQL Server Management Studio, Attività, Genera script. Spuntare tutti gli oggetti, negli oggetti avanzati assicurarsi che tutto il necessario sia scritto (statistiche, indici, ecc.), Deselezionare "USA database" se il database di destinazione ha un nome diverso, impostare la compatibilità con la versione del database di destinazione e generare un file che crea il tuo schema. Creare un database sulla destinazione ed eseguire il file su di esso (utilizzando osql, sqlcmdo la GUI).
Per spostare i dati, eseguire due volte la seguente query sul database di origine , commentando prima la seconda colonna per generare il file batch per estrarre i dati, quindi commentando la prima colonna per generare il file batch di importazione da eseguire sulla destinazione. (È necessario aggiungere i server di origine e destinazione, i nomi delle istanze, le directory dei file di output e di input, i nomi utente e le password. Per utilizzare la sicurezza integrata, sostituire le opzioni -Ue -Pcon semplicemente -T.)
Questo supporta Unicode, se non ti serve, cambia l' -Nopzione in entrambe le istruzioni -n.
SELECT
'bcp SOURCEDATABASE.' + s.Name + '.' + t.NAME + ' out d:\dbdump\' + s.Name + '.' + t.NAME + '.dat -N -S SOURCESERVER\INSTANCE -UUSER -PPASSWORD'
-- 'bcp DESTINATIONDATASE.' + s.Name + '.' + t.NAME + ' in d:\dbdump\' + s.Name + '.' + t.NAME + '.dat -N -S DESTINATIONSERVER\INSTANCE -UUSER -PPASSWORD -E -h TABLOCK -b 1000 -e d:\dbdump\' + s.Name + '.' + t.NAME + '.ERRORS.dat'
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
LEFT OUTER JOIN
sys.schemas s ON t.schema_id = s.schema_id
ORDER BY
s.Name, t.NAME
Dopo aver eseguito i file di controllo denominati schema.tablename.ERRORS.dat - includerà tutte le righe non riuscite, vuota se non presente.
Riferimento MSDN per BCP qui , passeggiata più amichevole attraverso le opzioni BCP qui .
Ho trovato questo enormemente superiore alla generazione di script e uno qualsiasi degli strumenti che ho provato. Funziona anche su database RDS (che non consentono backup). I file di dati generati hanno una dimensione del 30% degli script SQL, eseguendoli richiede una frazione del tempo ed è molto più affidabile. (Gli script generati da SQL Server per i dati di scripting sono sempre scattati, a volte prevedibilmente a volte no, l'SQL generato non era compatibile con 2008R2 (ad esempio, utilizzato nvarchar(0), spesso non completato per nessun motivo riconoscibile, ecc. BCP replica anche eventuali violazioni dei vincoli , come l'integrità referenziale.).