检查sql server中是否存在文件?

mr_*_*air 46 sql sql-server sql-server-2008

解决方案:http://www.tech-recipes.com/rx/30527/sql-server-how-to-check-if-a-file-exists-in-a-directory/

使用stackoverflow问题发表了关于这个问题的帖子来帮助其他人.

id  filepath

1   C:\vishwanath\21776656.docx
2   C:\vishwanath\vish\s_srv_req_2009.txt
3   C:\Users\dalvi\DW\DW20SharedAmd64.exe
4   C:\Users\dalvi\1.txt
Run Code Online (Sandbox Code Playgroud)

我在我的数据库服务器中创建了这样的表,我在文件路径列中存储了文件路径,现在我要使用sql检查文件是否存在于我的机器中,如果它存在,我需要在我的机器中添加临时列表显示是,如果存在且不存在.

我写了这个代码适用于1个文件但是我不知道如何将它用于我的表.

DECLARE @isExists INT
exec master.dbo.xp_fileexist 'C:\vishwanath\21776656.docx', 
@isExists OUTPUT
SELECT case @isExists 
when 1 then 'Yes' 
else 'No' 
end as isExists
Run Code Online (Sandbox Code Playgroud)

最终输出应该是这样的

id  filepath                                 Isexists

1   C:\vishwanath\21776656.docx               Yes
2   C:\vishwanath\vish\s_srv_req_2009.txt     Yes
3   C:\Users\dalvi\DW\DW20SharedAmd64.exe     Yes
4   C:\Users\dalvi\1.txt                      No
Run Code Online (Sandbox Code Playgroud)

Chr*_*ler 94

创建一个这样的函数:

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
Run Code Online (Sandbox Code Playgroud)

编辑表并添加计算列(IsExists BIT).将表达式设置为:

dbo.fn_FileExists(filepath)
Run Code Online (Sandbox Code Playgroud)

然后选择:

SELECT * FROM dbo.MyTable where IsExists = 1
Run Code Online (Sandbox Code Playgroud)

更新:

要在计算列外使用该函数:

select id, filename, dbo.fn_FileExists(filename) as IsExists
from dbo.MyTable
Run Code Online (Sandbox Code Playgroud)

更新:

如果函数为已知文件返回0,则可能存在权限问题.确保SQL Server的帐户具有足够的权限来访问该文件夹和文件.只读应该足够了.

是的,默认情况下,"网络服务"帐户在大多数文件夹中都没有足够的权限.右键单击相关文件夹并选择"属性",然后单击"安全"选项卡.点击"修改",然后添加"网络服务".单击"应用"并重新测试.