Se non si desidera acquistare alcun utensile (che valga totalmente il suo prezzo, BTW), è sempre possibile interrogare le viste del catalogo di sistema e estrai le informazioni da lì per creare script che potresti eseguire sul tuo nuovo database.
Nel caso di ad es. i vincoli di default, questa query vi mostra una lista di tutti i vincoli di default nel database:
SELECT
dc.name 'Constraint Name',
OBJECT_NAME(parent_object_id) 'Table Name',
c.name 'Column Name',
definition
FROM
sys.default_constraints dc
INNER JOIN
sys.columns c ON dc.parent_object_id = c.object_id
AND dc.parent_column_id = c.column_id
ORDER BY
OBJECT_NAME(parent_object_id), c.name
e sulla base di questo, si potrebbe naturalmente creare una query che emettono istruzioni T-SQL per ricreare quei vincoli predefiniti sul server di destinazione:
SELECT
'ALTER TABLE ' + OBJECT_SCHEMA_NAME(dc.parent_object_id) + '.' + OBJECT_NAME(dc.parent_object_id) +
' ADD CONSTRAINT ' + dc.name + ' DEFAULT(' + definition
+ ') FOR ' + c.name
FROM
sys.default_constraints dc
INNER JOIN
sys.columns c ON dc.parent_object_id = c.object_id
AND dc.parent_column_id = c.column_id
si otterrebbe qualcosa di simile (per il campione AdventureWorks
DB):
ALTER TABLE dbo.Store ADD CONSTRAINT DF_Store_rowguid DEFAULT((newid())) FOR rowguid
ALTER TABLE dbo.Store ADD CONSTRAINT DF_Store_ModifiedDate DEFAULT((getdate())) FOR ModifiedDate
ALTER TABLE dbo.ProductPhoto ADD CONSTRAINT DF_ProductPhoto_ModifiedDate DEFAULT((getdate())) FOR ModifiedDate
ALTER TABLE dbo.ProductProductPhoto ADD CONSTRAINT DF_ProductProductPhoto_Primary DEFAULT(((0))) FOR Primary
ALTER TABLE dbo.ProductProductPhoto ADD CONSTRAINT DF_ProductProductPhoto_ModifiedDate DEFAULT((getdate())) FOR ModifiedDate
ALTER TABLE dbo.StoreContact ADD CONSTRAINT DF_StoreContact_rowguid DEFAULT((newid())) FOR rowguid
ALTER TABLE dbo.StoreContact ADD CONSTRAINT DF_StoreContact_ModifiedDate DEFAULT((getdate())) FOR ModifiedDate
ALTER TABLE dbo.Address ADD CONSTRAINT DF_Address_rowguid DEFAULT((newid())) FOR rowguid
Naturalmente, si potrebbe t indebolire il T-SQL risultante in uscita a proprio piacimento - ma, in pratica, copiare & incollare quei risultati dalla query al nuovo database e si parte.
Ovviamente, esistono viste del catalogo di sistema simili per le relazioni con le chiavi esterne (sys.foreign_keys), i vincoli di controllo (sys.check_constraints), gli indici (sys.indexes e sys.index_columns) e molti altri.
È un po 'di lavoro, ma può essere fatto nel proprio tempo e imparerai molto su SQL Server nel processo.
quindi è un tradizionale "make or buy" decisione tutto da capo :-)
Marc
Ho usato DbGhost per 10 anni e non mi ha mai deluso, non vorrei provare lo sviluppo SQL su media scala senza di esso. – penderi
Un'altra opzione che uso da molto tempo è AdeptSQL Diff. Non è gratuito, ma confronta schemi e dati, è molto veloce e può generare script di aggiornamento E ESEGUIRE direttamente dall'interno dell'applicazione. Anche ottenere gli script sotto il controllo della versione è importante. – DarinH