我使用以下代码检查文件夹中是否存在一个文件,并且该文件可以返回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,它与我想要的完全相同。不确定是什么问题以及如何解决。
答案 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)