欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SQL 变更 自动化 脚本 获取 数据 进入

程序员文章站 2024-03-15 18:03:30
...

你用数据加载一个新建立的数据库的策略将取决于你需要多少。 如果只有几行,那么单行的插入语句就可以了,但是除此之外,您还需要使用本机格式的BCP构建插入行。数据库增量同步 幸运的是,正如菲尔因素所展示的那样,SQL变更自动化可以用于任何一种策略。

当您使用SCA从脚本构建数据库并需要将数据导入目标数据库时,您可以选择两种策略之一。

  1. 使用语句 —添加一个单独的 数据 源脚本的目录,由一系列可执行的数据插入语句组成
  2. BCP以极快的速度输入数据 —最好使用本机格式,使用部署后脚本。

第一种策略是创建一个数据迁移脚本,这样就可以确保目标中的数据与源代码管理中的数据文件完全相同。 当您使用SCA时,它将首先通过将源”状态”与目标数据库进行比较来为模式创建迁移脚本(SCA假设任何版本的目标数据库已经存在),然后对任何数据执行相同的操作。 换句话说,它会将数据目录中的脚本与目标中的数据进行比较,并生成一个迁移脚本来同步它们。 这确保了目标模式和数据总是与源代码控制中的相同。 这对于少量的”静态”数据来说很好,但是对于任何数量的数据来说都是一个缓慢的过程。

第二个策略要快得多,但是如果您需要确保目录中的数据与目标中的数据相同,那么您需要在每个版本中都读取所有数据,首先删除(截断(现有数据。 这一策略也需要更多的PowerShell来实现。

我的前一篇文章”静态数据和数据库构建”探讨了部署、构建和数据的更多理论方面,解释了数据库中静态数据的类型,如何提供每种类型,以及对部署过程的影响。

我将演示第一种策略,使用一个数据目录,其中填充了将数据加载到德高望重者的每个表中的脚本 经皮脐血抽样 数据库,使用语句。

接下来,你需要一份 经皮脐血抽样 数据库,充满了大量的欺骗数据(在我的例子中是使用结构化查询语言数据生成器生成的),以及一个空的 数据 饭桶中项目脚本目录内的目录,它代表当前的数据库版本。

SQL 变更 自动化 脚本 获取 数据 进入

从库存中 经皮脐血抽样 数据库中,我们创建表示数据的结构化查询语言文件,并将它们复制到 数据 目录。 这些产品可以通过点击从SSMS轻松生产,也可以通过SMO自动生产。 我在这里展示了如何通过PowerShell将SQL服务器数据作为插入语句自动编写脚本。 如果您使用PowerShell脚本,您将需要更改末尾附近的行,以便每个数据文件都是表单 _数据。结构化查询语言,这也是SCA所理解的:

“$($FilePath)\$($s。Name)\$($The数据base。Name)\数据\$($。模式)。$($.名称)_数据。SQL “;

你的 数据 目录现在将有所有的数据脚本,以SCA能够识别的正确形式。我们将提供所有这些作为本文的示例项目,只是为了让您开始。

SQL 变更 自动化 脚本 获取 数据 进入

通常,您只想用这种方法创建”静态”数据表,但是我们正在创建整个数据库。 在目标SQL服务器实例上,创建一个新数据库。 我打了我的电话, Adeliza,但是如果你的猫有一个不同的名字,如汤姆或塔比莎,请用它来代替。

现在,我们将创建一个脚本来创建一个构建人工制品,并从中发布一个我们可以在目标数据库中使用的人工制品。 我在本系列的第一篇文章《SQL》变更自动化脚本的简单步骤》中描述了这个过程的基础。

SQL 变更 自动化 脚本 获取 数据 进入

这是PowerShell脚本。 当然,您需要将自己的所有细节填入对象中,您需要将脚本目录的路径和连接字符串添加到您想要构建数据库的SQL服务器实例中。


运行它,您会发现您的目标数据库是 经皮脐血抽样 数据库,里面有伪造的数据。

这种构建策略有好的一面也有坏的一面。 不利的一面是,除了少量的数据,比如几百行,这将是非常慢的,原因有二。 首先,SCA将所有这些数据存储在发布产品中,然后将这些数据逐行与目标中存在的任何数据进行比较。 其次,实际的数据加载过程使用单行语句。 如果这是一个例行的隔夜自动构建,这不会让您担心,但是如果您在每次提交时都进行连续的构建,或者当您开始工作时,您的数据库仍然在进行隔夜构建,这可能会让您担心。

也有好处。 首先,您可以用现有的数据库安全地运行它,它将只检查模式和数据是否与源中的内容相匹配。 其次,数据可以打包成或NuGet包,然后这个包可以用来为每个目标服务器创建单独的发布包。

但是,对于任何大量的数据,您都希望使用快速批量导入的方式将数据插入数据库。 到了某个时候,拥有数据库数据的所有副本(每个版本一份(开始变得愚蠢。 此外,”静态数据”设备也太慢了。

第二个策略是使用基于网络的数据目录,其中包含 bcp 文件,并使用批量插入将数据放入数据库,作为发布后脚本。 这更适合新的构建,而不是迁移,因此就脚本而言,它将只在还没有数据的情况下执行数据插入。 作为一种选择,您当然可以先截断表格 bcp 把数据放进去。

做某事 bcp,您可以:

  1. 拉”:使用基于结构化查询语言的,从托管目标SQL服务器实例的服务器的本地文件中导入数据。
  2. “推”:使用网络连接通过TDS导入数据。

为了使事情简单,并尽可能地保持在SCA中,我们将为此使用一个发布后的结构化查询语言脚本,而不是扩展我们的PowerShell脚本来执行数据输入。

这样做的唯一复杂之处是,在我们发布之前,要么我们需要复制 bcp 或者授予SQL服务器通过网络访问文件的权限。 除非您启用安全帐户委派,否则后者在安全地使用SQL服务器登录时会变得复杂,因此我们将使用前者策略,在托管目标数据库的窗子服务器上设置文件共享,并复制 bcp 把文件放进去。 这允许使用该登录的SQL Server(无论是基于窗子的登录还是SQL服务器登录(读取本地 bcp 的文件。

让我们试试看。 首先,我们将创建一些 bcp 文件。 我们不打算在包中包含这些内容,而是将它们放在我们选择的目录中。 在这里,通过PowerShell将SQL服务器数据编写为插入语句,是一个提取一组 bcp 数据库中的文件。 您只需将语句更改为,然后弹出 bcp 文件。

我们创建了另一个新的目标数据库,称为 塔比瑟,或者您喜欢的任何东西,在您选择的任何可用的SQL服务器实例上,创建我们的 经皮脐血抽样 数据库。 完成此操作后,您可以使用此信息创建一个到新数据库的连接字符串。

然后,您可以执行前一个脚本的一个相当复杂的版本,尽管图和以前一样。 唯一的区别是创建了一个部署后脚本,一旦建立了数据库,该脚本就由SCA执行。 这个脚本只是创建一个包含一系列语句的字符串,每个表一个语句,然后执行它。 我编写它是为了检查每个表的存在,并允许您提供一个逗号分隔的列表,列出您想要填充数据的所有表。 它默认为所有(%)表,但您只需给出您想要的所有表的列表,使用结构化查询语言通配符语法,例程会为您删除重复的表。

完成所有这些后,它会启用约束。 如果您不想这样做,就像在这个阶段您只想填充某些表一样,那么您只需在PowerShell脚本中清空字符串。

同样,将您自己的所有详细信息填入对象中,将脚本目录的路径和连接字符串添加到您想要构建数据库的SQL服务器实例中。 您还需要告诉脚本托管SQL服务器的窗子服务器上文件共享的联合国军司令部地址,以及窗子服务器上文件共享的本地地址。 该本地地址将被结构化查询语言用来通过用户拥有权限的本地目录获取文件。


如果一切顺利,你的数据库将会有一个非常快速的构建,充满了匿名化的数据。

如果您尝试两个版本,最好用饭桶创建两个独立的脚本目录,每个策略一个。 问题是他们打架:如果有 数据 目录,然后SCA将它,如果有一个发布后脚本,那么它也将被执行。

在数据库构建中需要数据的原因有很多。 您可以使用SCA构建一个数据库,并在一些或所有表中存储数据。 对于小型数据库或只需要几个存储有”静态”数据的小型表的数据库,最好使用通过数据目录中的语句为静态表指定数据的策略。 如果您需要插入几百行以上的数据,那么您将面临需要使用大容量数据输入的问题,最好是在本机格式的数据文件中。 幸运的是,SCA可以用于任何一种策略。

SamplePubsProject.