Visual studio 2010 在Visual Studio 2010数据库项目中生成种子数据

Visual studio 2010 在Visual Studio 2010数据库项目中生成种子数据,visual-studio-2010,deployment,database-project,seeding,static-data,Visual Studio 2010,Deployment,Database Project,Seeding,Static Data,我在VisualStudio2010中有一个数据库和一个数据库项目。我成功地推断了数据库项目中的模式,但我还需要以某种方式导入一些表Country、State、UserType等中的数据,这些表是引用表,而不是真正的数据表 有办法吗 到目前为止,我找到的唯一方法是在SQLServerManagementStudio中生成数据脚本,并将此脚本放置在数据库项目的部署后脚本文件中 有更简单的方法吗?我以前就是这么做的 我只想确保脚本中的每个语句看起来像: IF (EXISTS(SELECT * FRO

我在VisualStudio2010中有一个数据库和一个数据库项目。我成功地推断了数据库项目中的模式,但我还需要以某种方式导入一些表Country、State、UserType等中的数据,这些表是引用表,而不是真正的数据表

有办法吗

到目前为止,我找到的唯一方法是在SQLServerManagementStudio中生成数据脚本,并将此脚本放置在数据库项目的部署后脚本文件中


有更简单的方法吗?

我以前就是这么做的

我只想确保脚本中的每个语句看起来像:

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的。它以正确的格式为您自动执行这些部署后脚本。这是一个免费的谷歌代码托管项目,我们发现它对于编写静态数据脚本非常有用,也可以在现有数据之上进行更新。

通过使用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管道部署数据库时,上述脚本都将运行。如何更新数据。

您还可以使用Merge-in语句在部署后脚本中将种子数据更新/删除/插入到表中。我已经尝试过了,它对我有用这里是一个简单的示例:

*/ 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;

是的,这和我做的差不多。我希望“导入模式”中的UI提示也能导入数据或其他内容。。。但我想它只是不可用..不,我不知道。Datadude似乎主要关注模式,而不是数据。谢谢。。。这似乎是我维护参考数据的方式:在RedGate,我们计划支持数据库项目,这意味着SQL源代码管理的特性,例如对静态数据的支持,将在数据库项目后端之上可用。您可以在以下位置对该功能进行投票:使用postdeployment.script及其与新表和种子数据一起完美执行下面是脚本,之后我想添加新列并向其中插入数据我如何将其插入种子表Id、Cric_名称、队长、地区,[T20秩]选择1,N'Pakistan',N'Babar Azam',N'Asia',N'1'不存在的地方从dbo中选择1。种子表,其中id=1进入种子表id,Cric_名称,队长,地区,[T20等级]选择2,N'England',N'Nasir Hussain',N'Wales',N'3'如果不存在,请从dbo.seedingTable中选择1,其中id=2静态数据脚本生成器在您第一次运行时会启动,因为您必须手动编辑配置。然后,在我试图为其生成脚本的表上出现了一些主键冲突未处理的异常。YMMV.你需要对它有点理智。是的,它确实会在第一次爆炸,因为需要设置配置,以便它知道您想要什么数据库。至于第二个问题,很可能是我发现的同一个问题。该脚本不检查外键,也无法知道如何对插入进行排序,因此它只按照处理外键的顺序生成索引脚本。您需要手动组织它们运行的顺序,以避免外键问题。主键冲突可能意味着您正试图针对已包含数据的数据库运行数据。无论如何,谢谢你!