FakeTable 如何使用 COLUMNS_UPDATED() 函数?

How Does FakeTable Work with the COLUMNS_UPDATED() function?

我有一个 300 多列 table 和一个触发器。 我有 40(ish)个“感兴趣的列”,其余的我不关心。 触发器的目的是确定是否更新了任何“感兴趣的列”。

因此:确定 COLUMNS_UPDATED() 似乎是一种可行的方法,并且可以用它做一些位魔术。

现在:我正在伪造 300+ table 并在一整行中进行撞击以强制使用正确的列数以确保 COLMNS_UPDATED() 获得正确的 bytes/bits标记的列已更改。

我的问题是:这是不必要的吗,因为 FakeTable 的天才包含 COLUMNS_UPDATED() 的使用,它会 return “正确”的字节指示器,即使我只伪造了一个子集列?

tSQLt.FakeTable 在原来的基础上重建了 table,并且始终包含所有列。因此,在使用 tSQLt.ApplyTrigger 后,将触发器移至伪造的 table,COLUMS_UPDATED 将按设计工作。

也就是说,如果您遇到任何外部工具中的某个功能或 API 您将在您的产品中依赖的功能,并且您感觉有一个功能可以没有很好的记录,编写探索性测试并将该测试与其他测试一起检查总是一个好主意。

在这种情况下,我会在测试中动态创建一个宽 table,获取 table,在伪造的 table 上创建一个更新触发器,然后调用 tSQLt.AssertEquals 以确保 COLUMNS_UPDATED.

返回正确的值

你实现了两件事: A)您记录了您的代码所依赖的预期行为。这将有助于未来必须维护您的代码的开发人员。 B) 如果该行为发生变化,您会收到通知。

现在,需要明确的是,没有理由用文档完善的功能来做到这一点。但如果存在文档空白,这是一个很好的做法。