【问题标题】:Publish data with SSDT?使用 SSDT 发布数据?
【发布时间】:2013-04-16 05:20:40
【问题描述】:

我有一个 SSDT 项目。发布新版本时,我还想发布/初始化数据库中的一些数据。可以使用 SSDT 完成吗?

【问题讨论】:

    标签: sql-server-data-tools


    【解决方案1】:

    可以做到,但可能会很棘手。如果您在项目中设置了一个可用于“新”版本的变量,则可以将其作为一个部分放入您的部署后脚本中,该部分将运行一系列插入,但仅适用于该“新”类型。

    正如 David 所提到的,更好的方法可能是使用 Red-Gate 的数据比较之类的东西,或者在创建数据库后运行脚本。可以在部署后脚本中执行此操作,但可能会很棘手。

    这样的事情可能会奏效:

    IF '$(DeployType)' = 'New'
    BEGIN --"New" release scripts
    PRINT 'Post-Deploy Scripts for release.'
    :r .\InsertScript1.sql
    :r .\InsertScript2.sql
    --etc
    END --"New" release scripts
    

    【讨论】:

    • 在尝试运行 DML 之前将一些逻辑放入部署后脚本以检查记录是否存在可能会起作用?
    • 我们这样做了,但是这个部署后脚本只是运行实际的脚本。在脚本中,我们在插入数据之前检查数据是否已经存在。如果您为项目变量使用某个值,这只是一种仅运行某些脚本的方法。此外,当我们传入“New”变量时,它被设置为使用“New”发布配置文件运行,该配置文件总是重新创建数据库,因此在这些情况下我们不会做太多检查。
    【解决方案2】:

    这在 SSDT 中是不可能的。 current guidance 是使用后部署脚本。

    Redgate ReadyRoll 提供了许多 SSDT 用户熟悉的体验,但改进了 static data management 以及许多其他改进。

    【讨论】:

    • 看起来像一个部署后脚本意味着它是可能的,对吧?
    • 好吧,代码中的一切皆有可能!我的意思是没有对静态数据的特殊支持,因此您必须在 post deep 脚本中运行自己的代码作为解决方法。
    【解决方案3】:

    当它们被放置在项目的特定子文件夹中时,我们会自动包含合并脚本。

    【讨论】:

    • 我们也使用合并脚本,这些脚本是从另一个脚本自动生成的。这些都明确包含在部署后脚本中,类似于 Peter Schott 的回答,但没有“新”检查。
    【解决方案4】:

    根据您的工作,表值的 custructors 可能值得一看:

    SELECT *
    FROM
      (VALUES
        (101, 'Bikes'),
        (102, 'Accessories'),
        (103, 'Clothes')
      ) AS Category(CategoryID, CategoryName);
    

    这些很容易被 SSDT 传输和比较。

    矿石信息见https://www.simple-talk.com/sql/sql-training/table-value-constructors-in-sql-server-2008/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多