Если вы не хотите покупать какие-либо инструменты (которые полностью стоят их цены, BTW), вы всегда можете допросить просмотры системного каталога и извлеките информацию оттуда, чтобы создать скрипты, которые вы могли бы выполнить в своей новой базе данных.
В случае, например, Ограничения по умолчанию, этот запрос показывает список всех ограничений по умолчанию в базе данных:
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
и на основе этого, вы могли бы, конечно, создать запрос, который будет испускать операторы T-SQL, чтобы восстановить эти ограничения по умолчанию на целевом сервере:
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
вы бы получить что-то вроде этого (для 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
конечно, вы могли бы т слабый результат T-SQL выводится по вашему вкусу - но в основном, копия & вставляет эти результаты из запроса в вашу новую базу данных и уходит.
Конечно, существуют похожие представления системного каталога для отношений внешних ключей (sys.foreign_keys), проверки ограничений (sys.check_constraints), индексов (sys.indexes и sys.index_columns) и многих других.
Это немного работа, но это можно сделать в свое время, и вы узнаете многое о SQL Server в этом процессе.
Так что традиционные «сделать или купить» решение снова :-)
Марк
Я использовал DbGhost в течение 10 лет, и это никогда не подведет меня, я бы не стал заниматься разработкой SQL-средним без него. – penderi
Другим вариантом, который я использовал в течение длительного времени, является AdeptSQL Diff. Не бесплатный, но сравнение схем и данных происходит очень быстро и может генерировать сценарии обновления и запускать их прямо из приложения. Однако важно, чтобы ваши скрипты под управлением версиями были важны. – DarinH