2016-04-25 7 views
1

Seit Version 2005 ermöglicht Microsoft SQL Server das Erstellen eines Pfades, falls dieser nicht existiert. Rufen Sie einfach die gespeicherte Prozedur mit dem Parameter auf, der zum gewünschten Pfad auf der Festplatte führt.Erweiterte gespeicherte Prozedur xp_create_subdir gibt die Meldung "Ungültiger Parameter" zurück

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

Also, wenn Sie Code oben in Abfragebereich in Microsoft SQL Server Management Studio schreiben, erhalten Sie folgende Fehlermeldung:

Msg 22048, Ebene 15, Status 0, Zeile 0 Fehler bei der Ausführung erweiterte gespeicherte Prozedur: ungültige Parameter

Es ist seltsam, dass, wenn Sie Code

exec xp_create_subdir N'E:\backup' 
ändern

und führen Sie es aus, das Verzeichnis wird am gewünschten Pfad erstellt, vorausgesetzt, dass das SQL-Dienstkonto über Schreibrechte verfügt.

Antwort

2

Obwohl nvarchar (max) maximale Länge von 2 GB Zeichen, wenn Sie @targetDirectory Variablendeklaration zu

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

und führen Sie folgende Anweisung

exec xp_create_subdir @targetDirectory 

Sie erfolgreich erstellen Unterverzeichnis Backup auf der Festplatte E ändern : wenn es nicht existiert und Nachricht zurücksenden

Befehl (e) erfolgreich abgeschlossen. im Nachrichtenfenster.

Der Grund dafür ist, dass gespeicherte Prozedur xp_create_subdir nicht nvarchar (max) Datentyp akzeptiert.

** EDIT: ** Nach Sean Lange Kommentar, der Grund war, dass die variable Länge in den obigen Aussagen unterschiedlich war.

+2

nvarchar (max) hat NICHT eine Länge von 4000. Es verbraucht so viel Speicher, wie die Daten benötigen, bis zu einem Maximum von 2^31-1 Bytes oder 2GB. Ich habe die Lösung für dein Problem gefunden. :) –

+0

Vergessen Sie nicht die Beschränkung der Windows 260 Zeichen (https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx#maxpath) auf Dateipfaden auch. Auch wenn es sich nicht direkt auf Ihr Problem bezieht, möchten Sie den Eingabeparameter möglicherweise lieber auf 260 Zeichen anstatt auf die von Ihnen definierten 4000 eingeben. –

+0

@JohnEisbrener Ich hoffe, dass SQL Server für Linux nicht mit dem gleichen Problem leiden wird. –

Verwandte Themen