2016-04-25 113 views
1

自2005版以來,Microsoft SQL Server允許創建路徑(如果路徑不存在)。只需調用帶有參數的存儲過程即可導致磁盤上的所需路徑。擴展存儲過程xp_create_subdir返回「無效參數」消息

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服務帳戶有權寫入,則在所需的路徑上創建目錄。

回答

2

雖然爲nvarchar(最大)具有2GB的字符最大長度,如果你改變@targetDirectory變量聲明

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

,並執行以下語句

exec xp_create_subdir @targetDirectory 

成功創建上E盤備份子目錄:如果不存在並返回消息

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

其原因是存儲過程xp_create_subdir不接受爲nvarchar(max)數據類型

**編輯:**根據Sean Lange評論,原因是上面的陳述中變長度是不同的。

+2

nvarchar(max)不具有4000的長度。它將消耗盡可能多的存儲空間,因爲數據需要最多2^31-1個字節或2GB。很高興找到解決問題的辦法。 :) –

+0

不要忘記文件路徑上的Windows 260字符限制(https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx#maxpath)以及。儘管它與您的問題沒有直接關係,但您可能需要強制輸入參數爲260個字符,而不是您已定義的4000個字符。 –

+0

@JohnEisbrener我希望SQL Server for Linux不會遇到同樣的問題。 –