Variablen Definieren und Setzen

27/06/2008 - 16:31 von Patrick Pohlmann | Report spam
Hallo Zusammen,

ich versuche jetzt schon seit Stunden eine Prozedur zu schreiben in der ich
variablen Nutze (siehe auch mein Treed vor ein paar Stunden)

Das Problem ist, dass ich irgendwie nicht weis, wie man Variablen in der
Prozedur auch mit Inhalt füllt. Ich dachte das geht mit SET, aber wohl nicht
so, wie ich mir das vorstelle.

Hier mal mein Statement:

ALTER PROCEDURE [dbo].[Proz_Dateisystem]
(@Vorgang as sysname,
@Verzeichnis sysname,
@Befehl as sysname)
SET @Vorgang = 'MkDir'
Set @Verzeichnis = "c:\test 1"
Set @Befehl = @Vorgang + @Verzeichnis
AS EXEC xp_cmdshell @Befehl, no_output

Es wàre super, wenn mir jemand sagen könnte, was ich falsch mache. AUch ist
mir der Unterschied zwischen " und ' nochnicht wirklich klar.

Ich muss z.B. den Dateinamen ja m.E. in " setzen, da ich hier eine Leerzeile
im Namen habe.

In der Tatsàchlichen Anwendung möchte ich die Werte @Vorgang und
@Verzeichnis natürlich von Außen übergeben. Diese hier zu füllen mache ich
im Grund nur zum Testen.

Um es von außen zu füllen sollte ich wohl folgenden Aufruf starten, oder:

dbo.meineProzedur @Vorgang = "MkDir, @Verzeichnis="meinVerzeichnis"

Vielen Dank für Eure Hilfe.

Grüße

Patrick!
 

Lesen sie die antworten

#1 Elmar Boye
27/06/2008 - 17:22 | Warnen spam
Hallo Patrick,

Patrick Pohlmann schrieb:
ich versuche jetzt schon seit Stunden eine Prozedur zu schreiben in der
ich variablen Nutze (siehe auch mein Treed vor ein paar Stunden)

Das Problem ist, dass ich irgendwie nicht weis, wie man Variablen in der
Prozedur auch mit Inhalt füllt. Ich dachte das geht mit SET, aber wohl
nicht so, wie ich mir das vorstelle.

Hier mal mein Statement:

ALTER PROCEDURE [dbo].[Proz_Dateisystem]
(@Vorgang as sysname,
@Verzeichnis sysname,
@Befehl as sysname)
SET @Vorgang = 'MkDir'
Set @Verzeichnis = "c:\test 1"
Set @Befehl = @Vorgang + @Verzeichnis
AS EXEC xp_cmdshell @Befehl, no_output




das könnte ein klein wenig aufgebessert aussehen wie
ALTER PROCEDURE [dbo].[Proz_Dateisystem]
(
@Vorgang sysname,
@Verzeichnis sysname -- MAX_PATH = 248 (aber nicht QUOTENAME)
)
AS
SET NOCOUNT ON
DECLARE @rc int
DECLARE @Befehl nvarchar(4000)

SET @Vorgang = UPPER(@Vorgang)
IF NOT (@Vorgang IN (N'MKDIR', N'RMDIR'))
BEGIN
RAISERROR ('Vorgang ''%s'' ist nicht erlaubt', 16, 1, @Vorgang)
RETURN -1
END

SET @Verzeichnis = LTRIM(RTRIM(@Verzeichnis))
IF @Verzeichnis IS NULL OR LEN(@Verzeichnis) = 0
BEGIN
RAISERROR ('Fehlende Verzeichnisangabe.', 16, 1)
RETURN -1
END

SET @Befehl = @Vorgang + N' ' + QUOTENAME(@Verzeichnis, '"')
EXEC @rc = xp_cmdshell @Befehl, no_output
RETURN @rc
GO

Wobei da viel mehr Sicherheitsprüfungen enthalten sein sollten...
aber das ist ein anderes Thema.

Um es von außen zu füllen sollte ich wohl folgenden Aufruf starten, oder:

dbo.meineProzedur @Vorgang = "MkDir, @Verzeichnis="meinVerzeichnis"




Wàre dann:
EXEC dbo.Proz_Dateisystem @Vorgang = N'MkDir', @Verzeichnis='meinVerzeichnis'


Es wàre super, wenn mir jemand sagen könnte, was ich falsch mache. AUch
ist mir der Unterschied zwischen " und ' nochnicht wirklich klar.



Der SQL Server nutzt im Standard den einfachen Anführungstrich.
Die Kommandozeile verwendet doppelte Anführungsstriche.

Gruß Elmar

Ähnliche fragen