如何使用temp变量替换xp_fileexist函数中的特定路径

时间:2019-12-12 17:04:47

标签: sql-server

我使用以下代码检查文件夹中是否存在一个文件,并且该文件可以返回1。

代码A:

DECLARE @result INT
EXEC master.dbo.xp_fileexist 'C:\Users\folder\123.json', @result OUTPUT
SELECT @result

现在我想要一个变量来表示路径并创建以下代码,但是它不起作用,返回错误消息

  

信息22027,第15级,状态1,第2行
  用法:执行xp_fileexist [,OUTPUT]

代码B:

DECLARE @rootfolder AS NVARCHAR(MAX),
        @file AS NVARCHAR(MAX)
declare @jsonfilename varchar(100)

set @rootfolder = 'C:\Users\folder\'
set @jsonfilename = '123.json'
set @file = concat(@rootfolder, @jsonfilename);

DECLARE @result INT
EXEC master.dbo.xp_fileexist @file, @result OUTPUT
select @result

如果我打印@file,它与我想要的完全相同。不确定是什么问题以及如何解决。

1 个答案:

答案 0 :(得分:1)

看起来xp_fileexist不接受VARCHAR(MAX)NVARCHAR(MAX)作为输入。我收到与您相同的错误(SQL Server 2017 Ent。),但指定字符长度有效:

DECLARE @rootfolder AS VARCHAR(max),
        @file AS NVARCHAR(255)
declare @jsonfilename varchar(100)

set @rootfolder = 'C:\Users\folder\'
set @jsonfilename = '123.json'
set @file = concat(@rootfolder, @jsonfilename);

DECLARE @result INT
EXEC master.dbo.xp_fileexist @file, @result OUTPUT
select @result

从SQL Server 2017开始,还有一个新的DMF sys.dm_os_file_exists()可以执行相同的操作并支持MAX

DECLARE @rootfolder AS VARCHAR(max),
        @file AS NVARCHAR(max)
declare @jsonfilename varchar(100)

set @rootfolder = 'C:\Users\folder\'
set @jsonfilename = '123.json'
set @file = concat(@rootfolder, @jsonfilename);

DECLARE @result INT
SELECT @result = file_exists FROM sys.dm_os_file_exists(@file)