带有IF EXISTS的xp_fileexist

时间:2014-06-02 09:14:53

标签: sql-server-2008 stored-procedures

我目前正在尝试创建一个存储过程来检查文件是否存在,如果是,那么它会再运行一些代码,如果没有的话。它停止了。

所以使用exec master..xp_fileexist @FileName

返回

File Exists| File is a Directory| Parent Directory Exists
          1|                   0| 1

我无法弄清楚语法或设置将存储过程放入IF EXISTS语句

IF EXISTS (
          exec master..xp_fileexist @FileName

          )

BEGIN 
select 'File is there'
END
ELSE
BEGIN
select 'File is not there'
END

以上不起作用,有人能把我放在正确的道路上吗?

4 个答案:

答案 0 :(得分:2)

你可以这样做:

declare @result as int
declare @path as nvarchar(50)

--set your path
set @path= 'C:\'

 EXEC master.dbo.xp_fileexist @path, @result OUTPUT

 if @result=1 
    print 'found'
 else
    print 'not found'

答案 1 :(得分:1)

我能想到的最佳方法是使用OPENROWSET并使用存储过程的结果填充临时表。但是传递一个参数很棘手但是这个链接应该让你开始正确的方向

http://sqlserverplanet.com/tsql/insert-stored-procedure-results-into-table

填充表格后,只需使用正常的IF EXISTS查询

即可

答案 2 :(得分:1)

xp_fileexists始终返回结果。

因此,您不想检查结果是否存在,您想检查过程调用的结果。

要获取过程调用的结果,可以使用insert... exec构造

declare @t table (fileexists bit, fileisdirectory bit, parentdirectoryexists bit)
insert @t 
exec master..xp_fileexist 'c:\windows\explorer.exe'

if (exists (select * from @t where fileexists=1))
begin
    select 'file is there'
end

答案 3 :(得分:0)

请按照以下步骤操作:

  1. 导航到Sql Server配置管理器
  2. 左侧面板上的
  3. 转到SQL Server服务
  4. 选择您自己的实例(MyPc\Sqlexpress
  5. 输入帐户名称和用户名及密码
  6. 完成此操作后,请再次检查您的代码。它应该工作。