【问题标题】:Extended stored procedure xp_create_subdir returns "Invalid Parameter" message扩展存储过程 xp_create_subdir 返回“无效参数”消息
【发布时间】:2018-03-01 21:54:44
【问题描述】:

自 2005 版起,Microsoft SQL Server 允许创建不存在的路径。只需调用带有参数的存储过程即可获得所需的磁盘路径。

DECLARE @targetDirectory nvarchar(max) = N'E:\backup' 
exec xp_create_subdir @targetDirectory

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

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

奇怪的是,如果你把代码改成

exec xp_create_subdir N'E:\backup'

并执行它,目录创建在所需的路径,假设sql服务帐户具有写入权限。

【问题讨论】:

    标签: sql-server stored-procedures subdirectory


    【解决方案1】:

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

    DECLARE @targetDirectory nvarchar(4000) = N'E:\backup' 
    

    并执行以下语句

    exec xp_create_subdir @targetDirectory
    

    你成功在E盘上创建子目录备份:如果不存在则返回信息

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

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

    **编辑:**根据Sean Lange的评论,原因是上面语句中的可变长度不同。

    【讨论】:

    • nvarchar(max) 的长度不是 4000。它会消耗尽可能多的存储空间,因为数据需要最多 2^31-1 字节或 2GB。很高兴找到解决您问题的方法。 :)
    • 不要忘记文件路径上的 Windows 260 字符限制 (msdn.microsoft.com/en-us/library/windows/desktop/…)。即使它与您的问题没有直接关系,您也可能希望将输入参数强制键入 260 个字符,而不是您定义的 4000 个字符。
    • @JohnEisbrener 我希望 SQL Server for Linux 不会遇到同样的问题。
    • 可能不是因为它是操作系统限制,也不是与数据库引擎相关的东西。 Linux 通常看起来有 4096 个字符的文件路径限制和 255 个字符的文件名限制 (serverfault.com/questions/9546/filename-length-limits-on-linux)。
    猜你喜欢
    • 2017-07-21
    • 2016-01-21
    • 1970-01-01
    • 2020-05-01
    • 2020-07-14
    • 2016-10-24
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多