Генерация начальных данных в проекте базы данных 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. как обновить данные.