Сценарии T-SQL для копирования всех ограничений таблицы

Мой босс взял основы с помощью AVR в течение недели без предшествующего опыта.

8
задан OMG Ponies 5 October 2009 в 18:24
поделиться

5 ответов

Если вы не хотите покупать какие-либо инструменты (которые полностью окупаются, кстати), вы всегда можете опросить представления системного каталога и извлечь оттуда информацию для создания сценариев, которые вы может выполняться в вашей новой базе данных.

В случае, например, ограничений по умолчанию, этот запрос показывает вам список всех ограничений по умолчанию в вашей базе данных:

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 образца БД):

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.

Так что это традиционное решение «сделать или купить» снова и снова: -)

Marc

16
ответ дан 5 December 2019 в 07:35
поделиться

Red Gate SQL Compare - популярный платный способ сделать это.

2
ответ дан 5 December 2019 в 07:35
поделиться

Лучшим способом было бы сохранить весь ваш DDL-код в исходном элементе управления. Затем разверните его в производственной среде с помощью таких инструментов, как dbGhost (мой любимый) или SQL Compare

3
ответ дан 5 December 2019 в 07:35
поделиться

Хороший и бесплатный инструмент Microsoft. Вы можете экспортировать схему и данные.

Мастер публикации базы данных Microsoft SQL Server

0
ответ дан 5 December 2019 в 07:35
поделиться

Попробуйте DBSourceTools. http://dbsourcetools.codeplex.com
В нем есть функция сравнения схем, которая поможет вам создать сценарий обновления.
Однако имейте в виду, что вы должны использовать контроль исходного кода для всей своей базы данных.
Это то, для чего был разработан DBSourceTools - помочь разработчикам поставить свои базы данных под контроль версий.

0
ответ дан 5 December 2019 в 07:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: