-1

我对 SQL 语句不是很擅长,但我想知道一件我愿意知道的事情。

想象一个包含“y”或“n”值的“可见”列。在将所需行设置为“y”之前,是否可以只有一个“y”而不启动将所有行的该表更新为“n”值的预查询?

提前致谢。

4

2 回答 2

1

假设您要将 ID 为 123 的行设置为可见,您可以执行以下操作。第一个查询不会更新所有行,只会更新已设置为 Y 的行:

update MyTable set Visible = 'N' where
Visible = 'Y';
update MyTable set Visible = 'Y' where
ID = 123;

另一种方法是,与其将 Visible 设为标志,不如将其设为 VisibleDate 列。然后将该列设置为要显示的行的当前日期。然后,要确定当前可见的行,请从 VisibleDate 列中选择最大日期以查找该行。

于 2012-07-18T18:33:27.263 回答
0

您可能会考虑另一种方法来处理您正在做的事情。想象一下,你的表有一个主键(它应该)叫 id。

创建一个名为 Visible 的表:

create table Visible (id int)

现在,您可以通过以下查询创建标志:

select t.*, (case when v.id is not null then 'Y' else 'N' end) as VisibleFlag
from table t left outer join
     Visible v
     on t.id = v.id

您可以将此查询包装在视图中,以简化其他编码。

这使您能够将一行设置为可见,而不会影响其他行。性能应该是相当不错的,因为在表中查找一行,使用主键是一个快速的操作。您也可以将类似的表用于其他类型的标志,但您必须在每一行中指定标志的名称。

于 2012-07-18T18:47:02.103 回答