3

我在 Visual Studio 2010 中有一个数据库和一个数据库项目。我成功地推断了数据库项目中的架构,但我还需要以某种方式导入几个表(国家、州、用户类型等)中的数据,这些表是参考表,而不是参考表真正的数据表。

有办法吗?

到目前为止,我发现的唯一方法是在 SQL Server Management Studio 中生成数据脚本,并将此脚本放在数据库项目的部署后脚本文件中。

有更简单的方法吗?

4

4 回答 4

2

试试SQL Server的静态数据脚本生成器。它以正确的格式为您自动执行这些部署后脚本。这是一个免费的 Google Code 托管项目,我们发现它对于编写静态数据脚本很有用(也可以在现有数据之上进行更新)。

于 2011-11-22T13:49:48.780 回答
1

这几乎就是我以前做过的事情。

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

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 模板来生成这些脚本——我过去做过类似的事情。

于 2011-04-02T10:39:53.220 回答
1

您还可以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;
于 2020-04-06T11:12:49.137 回答
0

通过使用 postdeployment.script 及其与新表和种子数据完美执行,下面是脚本,之后我想添加新列并将数据插入其中 ii 如何做到这一点

 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 管道部署数据库时,上面的脚本都会运行。如何更新数据。

于 2020-04-06T05:57:22.963 回答