gpt4 book ai didi

c# - 在 .Net 中测试复杂的 T-SQL 脚本?

转载 作者:行者123 更新时间:2023-11-28 21:31:59 26 4
gpt4 key购买 nike

我正在使用 T-SQL 开发复杂的数据转换脚本。该脚本必须在新数据库方案和旧方案之间转换数据。

为了测试脚本,我执行了以下操作:

  1. 创建或重置两个数据库。
  2. 对我要测试的"new"数据库做一点小改动(添加一个新条目、删除一个条目等)
  3. 运行脚本以同步两个实例。
  4. 在“旧”实例中查看更改是否已在此处正确传播。

我手动完成所有工作,这确实是一项平凡的工作。我想要的是一个框架或工具,它可以自动执行步骤 1、3 和 4,并允许我编写更改和断言脚本(就像在正常的单元测试中一样)并运行多个测试。

我查看了 SQL Server Data Tools,但它们对 SQL 单元测试的支持非常有限。这就是为什么我正在寻找一些替代方案或基于扩展 MSTestxTest 的此类自动化示例。

最佳答案

我不知道你的测试的复杂性,但是,回滚测试期间所做的更改可能会对你有所帮助(据我了解,主要困难是为测试创建初始状态)?

-- The table from old database
CREATE TABLE [dbo].[People]
(
[Id] [int] NOT NULL PRIMARY KEY,
[FullName] [nvarchar](100) NOT NULL
)

-- The table from new database
CREATE TABLE [dbo].[People](
[Id] [int] NOT NULL PRIMARY KEY,
[FirstName] [nvarchar](100) NOT NULL,
[LastName] [nvarchar](100) NULL
)

示例测试(应将所有不存在的记录转移到旧表中):

BEGIN TRAN

INSERT INTO
[Old_Database].[dbo].[People]
SELECT
New_People.[Id],
(New_People.[FirstName] + ' ' + New_People.[LastName]) AS FullName
FROM
[New_Database].[dbo].[People] AS New_People
WHERE
NOT EXISTS(SELECT [Id] FROM [Old_Database].[dbo].[People] WHERE [Old_Database].[dbo].[People].[Id] = New_People.Id)

IF (@@ROWCOUNT = 0)
PRINT('Failed!');
ELSE
PRINT('Passed.');

-- We can look, what was changed
SELECT * FROM [Old_Database].[dbo].[People]

-- Do not commit the changes. This allows to run test many times
ROLLBACK TRAN

关于c# - 在 .Net 中测试复杂的 T-SQL 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17144652/

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