如何在VS 2012中的SQL Server数据库项目中存储静态数据

uri*_*ium 22 database version-control sql-server-2012 visual-studio-2012

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

我在vs 2010中找到了类似的文章,但他们使用的是Team Edition for Database专业人员.

  • 让我们的数据库受源代码控制.
  • 将本地开发DB与源代码管理中的最新版本同步.
  • 使用Visual Studio 2012和SQL Server 2012
  • 尽可能使用.Net工具,而不是像Redgate那样(Redgate很棒,但是如果我可以在VS 2012中使用工具的话我还不想要它)

das*_*ght 26

你可以使用这种方法:

  • 将您的参考数据放入XML文件中,每个表一个
  • 将包含引用数据的XML文件添加到数据库项目中
  • 使用Post-Deployment脚本从XML中提取数据并将其合并到表中

以下是通过示例说明的每个步骤的更详细描述.假设您需要初始化具有此结构的国家/地区的表格:

create table Country (
    CountryId uniqueidentifier NOT NULL,
    CountryCode varchar(2) NOT NULL,
    CountryName varchar(254) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

创建ReferenceData在数据库项目下调用的新文件夹.这应该是一个同级文件夹Schema ObjectsScripts.

添加一个调用Country.xmlReferenceData文件夹的新XML文件.填充文件如下:

<countries>
    <country CountryCode="CA" CountryName="Canada"/>
    <country CountryCode="MX" CountryName="Mexico"/>
    <country CountryCode="US" CountryName="United States of America"/>
</countries>
Run Code Online (Sandbox Code Playgroud)

查找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)
;
Run Code Online (Sandbox Code Playgroud)

我仅在VS 2008中尝试过此解决方案,但它应该与您的开发环境无关.