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的帐户具有足够的权限来访问该文件夹和文件.只读应该足够了.
是的,默认情况下,"网络服务"帐户在大多数文件夹中都没有足够的权限.右键单击相关文件夹并选择"属性",然后单击"安全"选项卡.点击"修改",然后添加"网络服务".单击"应用"并重新测试.