【问题标题】:How can i check file existence我如何检查文件是否存在
【发布时间】:2017-10-10 20:57:05
【问题描述】:

我有以下代码来更新docPath 字段,我需要有关如何在运行更新语句之前检查文件是否存在的帮助,或者仅当文件存在于目录中时才更新,否则跳过

INSERT INTO DocPath(itemId,docPath)
SELECT 
  itemId,
  '\\ABC-SERVER\Data\PRODUCTION\VAULT\2500000 - 2599999 \PDF\''
   +[WITESTCO].[dbo].[WIITEMX].[itemId]
   +'.pdf'  as docPath
   FROM [WITESTCO].[dbo].[WIITEMX]
   WHERE 
      itemId like '2500%' or itemId like '2501%' ; 

【问题讨论】:

标签: sql-server tsql


【解决方案1】:

创建一个这样的函数

CREATE FUNCTION dbo.fn_FileExists(@path varchar(512))
RETURNS BIT
AS
BEGIN
     DECLARE @result INT
     EXEC master.dbo.xp_fileexist @path, @result OUTPUT
     RETURN cast(@result as bit)
END;
GO

然后像这样使用函数

IF dbo.fn_FileExists('MyPath') = 1
INSERT INTO DocPath(itemId,docPath)
SELECT itemId,'MyPath' ...; 

类似于this question

【讨论】:

  • 在函数调用之后,INSERT语句处理之前,文件是不是可以被删除?
  • 当然有可能,但据我所知,不可能将文件锁定为从数据库事务中删除。
  • 在这种情况下,原来的问题仍然存在。在这种情况下处理错误不是更好吗?
  • 即使在插入语句完成后也会发生同样的事情。例如,我们检查一个文件是否存在,它存在,我们插入一行,然后有人删除该文件(假设 5 分钟后)。
猜你喜欢
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 2011-10-21
  • 2017-04-24
  • 2013-03-12
相关资源
最近更新 更多