Подтвердить что ты не робот

Как хранить статические данные в проекте базы данных SQL Server в VS 2012

Я пытаюсь использовать проект базы данных SQL Server для хранения всех наших скриптов таблицы, хранимой процедуры, просмотров и т.д. Я теперь стал способом удержания всех наших ссылочных (или статических) данных. Когда инструмент или проект запущен, он будет устанавливать все объекты БД и вставить все ссылочные данные.

Я нашел похожие статьи для vs 2010, но они использовали такие вещи, как Team Edition для профессионалов базы данных.

  • Получите нашу базу данных под контролем источника.
  • Синхронизируйте нашу локальную БД разработки с последней версией в исходном элементе управления.
  • Работа с Visual Studio 2012 и SQL Server 2012
  • Используйте инструменты .Net, насколько это возможно, а не что-то вроде Redgate (Redgate замечательный, но я не хочу этого делать, но если я могу использовать инструменты в VS 2012)
4b9b3361

Ответ 1

Вы можете использовать этот подход:

  • Поместите свои ссылочные данные в файлы XML, по одному на таблицу
  • Добавить XML файлы со справочными данными в проект базы данных
  • Использовать Post-Deployment script для извлечения данных из XML и объединения их в ваши таблицы

Ниже приведено более подробное описание каждого шага, иллюстрируемого примером. Скажем, что вам нужно инициализировать таблицу стран, которая имеет эту структуру:

create table Country (
    CountryId uniqueidentifier NOT NULL,
    CountryCode varchar(2) NOT NULL,
    CountryName varchar(254) NOT NULL
)

Создайте новую папку под названием ReferenceData в рамках проекта базы данных. Это должна быть папка для сестер Schema Objects и Scripts.

Добавьте новый XML файл с именем Country.xml в папку ReferenceData. Заполните файл следующим образом:

<countries>
    <country CountryCode="CA" CountryName="Canada"/>
    <country CountryCode="MX" CountryName="Mexico"/>
    <country CountryCode="US" CountryName="United States of America"/>
</countries>

Найдите Script.PostDeployment.sql и добавьте к нему следующий код:

DECLARE @h_Country int

DECLARE @xmlCountry xml = N'
:r ..\..\ReferenceData\Country.xml
'

EXEC sp_xml_preparedocument @h_Country OUTPUT, @xmlCountry

MERGE Country AS target USING (
    SELECT c.CountryCode, c.CountryName
    FROM OPENXML(@h_Country, '/countries/country', 1)
    WITH (CountryCode varchar(2), CountryName varchar(254)) as c) AS source (CountryCode, CountryName)
ON (source.CountryCode = target.CountryCode)
WHEN MATCHED THEN
    UPDATE SET CountryName = source.CountryName
WHEN NOT MATCHED BY TARGET THEN
    INSERT (CountryId, CountryCode, CountryName) values (newid(), source.CountryCode, source.CountryName)
;

Я пробовал это решение только в VS 2008, но он должен быть агностическим для вашей среды разработки.