【问题标题】:How do you store static data in your SQL Server Database Project in VS 2012如何在 VS 2012 的 SQL Server 数据库项目中存储静态数据
【发布时间】:2012-12-12 15:34:16
【问题描述】:

我正在尝试使用 SQL Server 数据库项目来保存我们所有的表、存储过程、视图等脚本。我现在想要一种方法来保留我们所有的参考(静态)数据。当工具或项目运行时,它将安装所有数据库对象并插入所有参考数据。

我在 vs 2010 中找到了类似的文章,但他们使用的是面向数据库专业人士的团队版。

  • 将我们的数据库置于源代码控制之下。
  • 将我们的本地开发数据库与源代码控制中的最新版本同步。
  • 使用 Visual Studio 2012 和 SQL Server 2012
  • 尽可能使用 .Net 工具,而不是像 Redgate 之类的工具(Redgate 很棒,但如果我可以在 VS 2012 中使用工具,我还不想放弃它)

【问题讨论】:

  • 为什么不首先使用实体​​框架代码?您可以使用它使用 POCO 类 + DataAnnotations 或 Fluent API 对所有数据库表/关系进行建模。然后 EF Migrations 可以处理您的数据库版本控制和/或为您的参考数据提供种子。

标签: database version-control visual-studio-2012 sql-server-2012


【解决方案1】:

您可以使用这种方法:

  • 将您的参考数据放入 XML 文件中,每个表一个
  • 将带有参考数据的 XML 文件添加到您的数据库项目中
  • 使用部署后脚本从 XML 中提取数据并将其合并到您的表中

以下是对每个步骤的更详细说明,并通过示例进行说明。假设您需要初始化具有这种结构的国家/地区表:

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

在您的数据库项目下创建一个名为ReferenceData 的新文件夹。它应该是Schema ObjectsScripts 的同级文件夹。

将名为 Country.xml 的新 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 中尝试过此解决方案,但它应该与您的开发环境无关。

【讨论】:

  • 既然你是唯一一个自愿发表意见的人,你可能会有一些名声。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多