【问题标题】:How Does FakeTable Work with the COLUMNS_UPDATED() function?FakeTable 如何与 COLUMNS_UPDATED() 函数一起使用?
【发布时间】:2021-06-25 14:00:49
【问题描述】:

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

所以:确定 COLUMNS_UPDATED() 似乎是一种可行的方法,并对此进行一些魔术。

现在:我正在伪造 300+ 表并在完整的行中夯实以强制正确数量的列,以确保 COLMNS_UPDATED() 获得正确的字节/位标记以更改列。

我的问题是:这是否不必要,因为 FakeTable 的天才包括使用 COLUMNS_UPDATED() 并且即使我只伪造了列的子集,它也会返回“正确”字节指示符?

【问题讨论】:

  • “我在伪造 300 多张桌子,并挤满了整排……”。这意味着什么?你能想出一个最小可行的重现,说明你在做什么以及你最终想要完成什么?

标签: sql-server tsqlt


【解决方案1】:

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

话虽如此,如果您在产品中依赖的任何外部工具或 API 中遇到某项功能,并且您觉得某项功能没有得到很好的文档记录,那么编写探索性测试并将该测试与其他测试一起检查始终是一个好主意。

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

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

现在,需要明确的是,没有理由使用有据可查的功能这样做。但是,如果存在文档空白,这是一个很好的做法。

【讨论】:

  • 感谢您的回答和建议。没有意识到 FakeTable 总是在幕后创建所有列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 2019-08-20
  • 1970-01-01
相关资源
最近更新 更多