Генерация начальных данных в проекте базы данных Visual Studio 2010

У меня есть база данных и проект базы данных в Visual studio 2010. Я успешно вывел схему в проекте базы данных, но мне также нужно каким-то образом импортировать данные в несколько таблиц (Country, State, UserType и т. Д.), Которые являются справочными таблицами, а не действительно таблицы данных.

Есть ли способ?

Единственный способ, который я нашел, - это создание сценариев данных в SQL Server Management Studio и размещение этого сценария в файле сценария после развертывания в проекте базы данных.

Любой более простой способ?

2 ответа

Решение

Это довольно много, как я делал это раньше.

Я просто хотел бы убедиться, что каждое утверждение в вашем скрипте выглядит примерно так:

IF (EXISTS(SELECT * FROM Country WHERE CountryId = 1))
    UPDATE MyTable SET Name = 'UK' WHERE CountryId = 1 AND Name != 'UK'
ELSE
    INSERT INTO MyTable (CountryId, Name) VALUES (1, 'UK')

Это означает, что при каждом развертывании базы данных ваши базовые справочные данные будут вставляться или обновляться, в зависимости от того, что наиболее подходит, и вы можете изменять эти сценарии для создания новых справочных данных для более новых версий базы данных.

Вы можете использовать шаблон T4 для генерации этих скриптов - я делал что-то подобное в прошлом.

Попробуйте генератор сценариев статических данных для SQL Server. Он автоматизирует эти сценарии после развертывания для вас в правильном формате. Это бесплатный проект, размещенный на Google Code, и мы сочли его полезным для создания сценариев для наших статических данных (также поверх существующих данных для обновлений).

Вы также можете использовать Merge INTO Оператор для обновления / удаления / вставки исходных данных в таблицу в вашем сценарии развертывания сообщения. Я пробовал, и он работает для меня, вот простой пример:

*/ print 'Inserting seed data for seedingTable'

MERGE INTO seedingTable AS Target 
USING (VALUES   (1, N'Pakistan', N'Babar Azam', N'Asia',N'1'),
(2, N'England',  N'Nasir Hussain', N'Wales',N'2'), 
(3, N'Newzeland', N'Stepn Flemming', N'Australia',N'4'), 
(4, N'India', N'Virat Koli', N'Asia',N'3'),  
(5, N'Bangladash', N'Saeed', N'Asia',N'8'),   
(6, N'Srilanka', N'Sangakara', N'Asia',N'7') ) 
AS Source (Id, Cric_name,captain,region,[T20-Rank]) ON Target.Id = Source.Id

-- update matched rows 
   WHEN MATCHED THEN 
   UPDATE SET Cric_name = Source.Cric_name, Captain = Source.Captain, Region=source.Region, [T20-Rank]=source.[T20-Rank]

-- insert new rows 
   WHEN NOT MATCHED BY TARGET THEN 
   INSERT (Id, Cric_name,captain,region,[T20-Rank]) 
   VALUES (Id, Cric_name,captain,region,[T20-Rank])
-- delete rows that are in the target but not the source
   WHEN NOT MATCHED BY SOURCE THEN
  DELETE;

Используя postdeployment.script и его отлично выполненный с новой таблицей и исходными данными в нем ниже находится сценарий, после чего я хочу добавить новый столбец и вставить в него данные, как я могу это сделать

 insert into seedingTable (Id, Cric_name, captain, region,[T20-Rank])
 select 1, N'Pakistan', N'Babar Azam', N'Asia',N'1' 
 where not exists
 (select 1 from dbo.seedingTable where id=1)     
 go
 insert into seedingTable (Id, Cric_name, captain, region,[T20-Rank]) select 2,
 N'England', N'Nasir Hussain', N'Wales',N'3' 
 where not exists
 (select 1 from dbo.seedingTable where id=2)

Сообщите мне, что приведенный выше сценарий будет запускаться каждый раз при развертывании базы данных с помощью конвейера Azure. как обновить данные.

Другие вопросы по тегам