0

目前我有一个将布尔字段存储为 VARCHAR(1) ('T' 或 'F')的数据库。我想用 BIT 替换这些。问题是这需要对使用数据库的程序进行大量更改。所以我认为合乎逻辑的步骤是添加一个 BIT 字段并将现有的 VARCHAR(1) 字段替换为我访问的计算列而不是访问 BIT 字段(因此程序可以继续按原样工作而无需更改,并被更改随着时间的推移使用 BIT 字段)。

我知道这不起作用(UPDATE 和 INSERT 不适用于计算列)。我知道一种选择是重命名现有表并添加一个视图来访问它,但我不认为这是一个可行的解决方案,因为添加和删除列、更改依赖视图等会容易出错(在我看来,这不是一个很好的解决方案)。

我的问题是 - 我有什么选择来实现上述行为(这样程序可以继续按原样工作)?

一个例子:

User (Active VARCHAR(1), ...)

更改为使用计算列:(不起作用)

User (Active_B BIT, Active AS CASE Active_B WHEN 1 THEN 'T' ELSE 'F' END, ...)

更新:修复了示例中的错误。

4

2 回答 2

1

它必须是:

ALTER TABLE dbo.User
ADD Active AS CASE Active_B WHEN 1 THEN 'T' ELSE 'F' END PERSISTED

需要在CASE. 而且我建议也使计算列保持不变 - 以便该值实际存储在磁盘上(并且每次访问它时都不会重新计算)。

于 2012-12-18T12:54:34.357 回答
0

一种选择是同时拥有 VARCHAR 和 BIT 字段并使用触发器在它们之间进行更新。

我只需要弄清楚如何防止无限递归(一个想法是让一个字段仅用于检查此触发器是否是由另一个触发器中的更新引起的(检查我们是否正在更新它并包含它)在触发器的更新中))。更新需要双向进行,以便轻松向后兼容。

于 2012-12-18T13:33:44.437 回答