在sql查询结果之前检查文件是否存在

在sql查询结果之前检查文件是否存在,sql,sql-server,Sql,Sql Server,我有一个网站与管理面板,人们可以上传文件和数据。我的网站位于2台服务器上,使用nlb,并且两台服务器通过dfs同步在一起,而且我在两台服务器上都有2台SQL Server,并且它们也同步 问题是同步两台服务器上的文件有时需要, 现在假设我有一个包含以下字段的表: Name, price, fileName 文件地址是指在2台服务器中同步的物理磁盘的某个位置 现在,假设网站运行此查询: Select * from myTable 如何告诉SQL,它只显示物理磁盘中存在的fileName字段的记

我有一个网站与管理面板,人们可以上传文件和数据。我的网站位于2台服务器上,使用nlb,并且两台服务器通过dfs同步在一起,而且我在两台服务器上都有2台SQL Server,并且它们也同步

问题是同步两台服务器上的文件有时需要, 现在假设我有一个包含以下字段的表:

Name, price, fileName
文件地址是指在2台服务器中同步的物理磁盘的某个位置

现在,假设网站运行此查询:

Select * from myTable
如何告诉SQL,它只显示物理磁盘中存在的
fileName
字段的记录

注意:我希望它使用SQL来完成,而不是在我的应用程序中

有两种选择:

  • 你已经提到了。最好添加一列(FileExists位(Y/N)),直接告诉您物理拷贝的状态

  • 第二个选项很乏味,因为您需要创建自定义逻辑,根据@MichałKomorowski给出的第一个注释链接在运行时标识物理副本

  • 理想情况下,数据库用于存储数据并与应用程序通信。数据库中的外部接口将是乏味的工作,并会降低性能


    例如,如果您实现了一个函数来检查物理文件,并且在如上所述的select查询中使用了该函数,那么检查状态的额外麻烦肯定会增加时间并降低性能。再想想

    请看这个问题“我希望它使用sql而不是在我的应用程序中实现”-是的,忘记分层和关注点分离。应用程序自然关心各种不同类型的资源,而数据库只关心数据。执行此类检查的自然和逻辑位置是在应用程序中。@Damien_不相信我必须使用sql,因为我要分页记录SSO,假设页面大小为10,而您需要第2页。第11-15行的文件当前不存在,因此返回第16-25行。然后,当您需要第3页时,这些文件现在已经出现,第3页将包含第21-30行(重复第5行)。无论你做什么,这里都会很混乱,我仍然建议最好在应用程序中解决它。