2016-04-25 8 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(max)は2GBの文字の最大長さがありますが、あなたが声明

exec xp_create_subdir @targetDirectory 

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

と実行に@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)を忘れないでください。同じように。あなたの問題に直接関係していないにもかかわらず、あなたが定義した4000ではなく260文字に入力パラメータを強く入力したいかもしれません。 –

+0

@ JohnEisbrener SQL Server for Linuxが同じ問題を抱えていないことを願っています。 –

関連する問題