扩展存储过程xp_create_subdir返回“无效参数”消息

Rud*_*cek 1 sql-server stored-procedures subdirectory

从2005版开始,Microsoft SQL Server允许创建不存在的路径。只需使用指向磁盘上所需路径的参数调用存储过程即可。

DECLARE @targetDirectory nvarchar(max) = N'E:\backup' 
exec xp_create_subdir @targetDirectory
Run Code Online (Sandbox Code Playgroud)

因此,如果将上面的代码写入Microsoft SQL Server Management Studio的查询窗格中,则会收到以下错误消息:

消息22048,级别15,状态0,行0执行扩展存储过程时出错:参数无效

奇怪的是,如果您将代码更改为

exec xp_create_subdir N'E:\backup'
Run Code Online (Sandbox Code Playgroud)

并执行该命令,并在假定sql服务帐户具有写权限的情况下,在所需路径中创建目录。

Rud*_*cek 5

尽管nvarchar(max)的最大长度为2GB字符,但是如果将@targetDirectory变量声明更改为

DECLARE @targetDirectory nvarchar(4000) = N'E:\backup' 
Run Code Online (Sandbox Code Playgroud)

并执行以下语句

exec xp_create_subdir @targetDirectory
Run Code Online (Sandbox Code Playgroud)

您成功在磁盘E上创建子目录备份:如果不存在,并返回消息

命令已成功完成。在消息窗口中。

原因是存储过程xp_create_subdir不接受nvarchar(max)数据类型

**编辑:**根据肖恩·兰格Sean Lange)的评论,原因是上述声明中的可变长度不同。

  • nvarchar(max)的长度不为4000。它将消耗数据所需的存储空间,最大为2 ^ 31-1字节或2GB。很高兴找出解决您问题的方法。:) (2认同)