gpt4 book ai didi

visual-studio-2010 - 使用 Visual Studio 2010 数据库项目填充静态数据的最佳实践?

转载 作者:行者123 更新时间:2023-12-03 11:02:29 26 4
gpt4 key购买 nike

如何使用 Visual Studio 数据库项目用静态的、源代码控制的数据填充数据库?我已经尝试了以下所有三种策略,发现每一种都比上一种更好。我正在使用但对策略 3 并不完全满意。您有其他选择吗?

  • 将插入脚本放在“数据生成计划”文件夹中。引用“Script.PostDeployment.sql”文件中的脚本以将它们包含在部署过程中。

    -- 优点:直截了当
    -- 缺点:slooooooow
    -- 缺点:后续部署必须先删除静态数据或检查数据不存在 => 低效
  • 第一次使用最方便的方法将数据插入数据库(例如,可以是 SSMS 编辑表功能)。使用 bcp 命令行实用程序提取该数据以创建一堆数据文件并将它们添加到您的项目中。创建在“Scripts.PostDeployment.sql”文件中引用的脚本,为每个数据文件执行“批量插入”语句。

    -- 优点:比插入语句快得多
    -- 优点:可以利用 SSMS 编辑表功能
    -- 缺点:每个批量插入语句都需要数据文件的完全限定文件名,因此如果数据文件位于我的机器上的“C:\Projects\Dev\Source\foo.dat”,那么远程开发机器也必须将它们放在该位置或批量插入语句失败
    -- 缺点:在后续部署中执行批量插入语句之前必须删除现有的静态数据
  • 在部署期间创建临时表来保存静态数据,并使用 sql merge 语句将这些表与目标表同步。见 eitherthese博客文章。

    -- 优点:似乎 sql merge 对这个问题有完美的语义
    -- 缺点:此策略的逻辑在每个文件中重复
    -- 缺点:表定义在 sql 合并文件中作为临时表重复

  • 有没有更好的替代策略?我放弃了策略 1,因为它太慢了。由于完全限定的文件名问题,我不喜欢策略 2。我对策略 3 感到满意但并不激动。是否有最佳实践?

    最佳答案

    在您的 insert.sql 脚本中,您可以在 [__RefactorLog] 表(这是部署使用的系统表)中放置一个 GUID,并在插入您的数据之前检查此 GUID 是否存在,如下所示:

    :setvar SOMEID "784B2FC9-2B1E-5798-8478-24EE856E62AE"//在 VS2010 中使用 Tools\CreateGuid 创建 guid

    如果不存在 (SELECT [OperationKey] FROM [dbo].[__RefactorLog] where [OperationKey] = '$(SOMEID)')

    开始

    ...

    INSERT INTO [dbo].[__RefactorLog] ([OperationKey] ) values( '$(SOMEID )' )

    结尾

    然后,仅当数据不存在或需要时才插入数据(通过更改 Guid)。

    关于visual-studio-2010 - 使用 Visual Studio 2010 数据库项目填充静态数据的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4279902/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com