你能告诉SQL Server不要返回特定的行吗?

Mar*_*s L 1 sql t-sql sql-server sql-server-2005

我们有一个数据库,其中联系人只是软删除,即我们将名为deleted的位设置为true.API处理此问题,但有时您需要直接针对数据库运行查询,并且很容易忘记该位,并导出实际删除的联系人.这不是一个大问题,因为我习惯了这个系统,但是如果我正在度假,或者如果其他人要接管我想确保这些行不会被退回 - 除非特别要求.这给我们留下了以下两个问题:

  1. 有没有办法告诉SQL Server(在这种情况下为2005)不返回行,例如,如果某个位设置为true?

  2. 如果是这样,如果特别要求(如果bit ='true'),仍可以检索这些行吗?

mar*_*c_s 8

要选择未删除的行或已删除的行,请创建两个视图:

CREATE VIEW ActiveContacts
AS 
   SELECT (list of fields)
   FROM dbo.Contacts
   WHERE deleted = 0  

CREATE VIEW DeletedContacts
AS
  SELECT (list of fields)
  FROM dbo.Contacts
  WHERE deleted = 1
Run Code Online (Sandbox Code Playgroud)

现在,您可以轻松地从活动或已删除的联系人中选择:

SELECT (list of fields)
FROM ActiveContacts

SELECT (list of fields)
FROM DeletedContacts
Run Code Online (Sandbox Code Playgroud)

这样,您可以轻松地封装该选择条件,如果您未在视图中返回"已删除"标志,则外部用户甚至不会看到该标志,也不会知道它在那里.


Ste*_*eet 5

我可以看到自动为您执行此操作的唯一方法是在相关表上创建视图,专门排除已删除的行.然后在需要查看已删除的数据时使用真实表.