是否可以对 SQL Server 中的表应用默认过滤器?

Ale*_*ube 4 sql t-sql sql-server

我有一个名为Users的表(例如),它有3列(Id、Name和IsDeleted),IsDeleted表示用户被删除,还是不被删除?

当我运行下面的 select 语句(select * from users)时,是否可以自动过滤掉 IsDeleted 等于 1 的记录?我有一个仅设计为软删除的数据库,因此有很多带有此 IsDeleted 列的表。当查询数据库时,我们必须添加where子句来过滤掉这些记录,这非常烦人,尤其是在查询/连接多个表时。我想在这里问,是否有一些功能(如默认过滤器?)可以做到这一点。因此,只有在禁用表默认过滤器的情况下,才能查询已删除的记录。

mro*_*ach 5

实现这一目标的一种干净且易于理解的方法是使用视图。您可以创建一个视图,通过此标志过滤掉用户并返回所有列。

CREATE VIEW v_Users AS
    SELECT * FROM Users WHERE IsDeleted = 0
Run Code Online (Sandbox Code Playgroud)

然后,在所有查询中,您可以使用此视图而不是表。

SELECT u.email, u.name, likes.*
FROM v_Users AS u
INNER JOIN likes ON likes.user_id = u.id
Run Code Online (Sandbox Code Playgroud)

完整的示例小提琴: http: //rextester.com/QDN58706