pcfjkg
Goto Top

SQL2k8 R2 Übergabe varchar an SP mit führendem Doppelkreuz scheitert

An eine gespeicherte Prozedur werden verschiedene Parameter übergeben, u.a. eine Tabellenbezeichnung. Wenn dieser Parameter mit ## beginnt gibt es ein Problem.

ALTER Procedure P_XYZ
(
@zahlodertext char(1),
@db_name varchar(26),
@tabname varchar(66),

@rückInfo varchar(666) OUTPUT
)
AS

...

SET @rückinfo = @tabname
RETURN

Sobald die Variable @tabname mit dem Doppelkreuz beginnt (z.B. '##T_ABC') geschieht - ja was eigentlich ?

Wenn ich @tabname über @rückinfo auswerte, gibt die SP den Wert der Variablen zurück (T_ABC etc.). Gleiches mit ##T_ABC und es erfolgt keine oder eine leere Rückgabe. Es werden im konkreten Anwendungsfall noch mehr Parameter übergeben, aber das sollte wohl keine Rolle spielen.

Was ist hier falsch ?

Dank an die Experten.

Viele Grüße von
PCFJKG

Content-ID: 186835

Url: https://administrator.de/contentid/186835

Ausgedruckt am: 24.11.2024 um 04:11 Uhr

LianenSchwinger
LianenSchwinger 21.06.2012 aktualisiert um 11:44:47 Uhr
Goto Top
Hallo,

kenne mich mit dem MS SQL zwar nicht aus aber vielleicht hilft ja folgende Seite.

http://msdn.microsoft.com/de-de/library/ms175874.aspx

Gruß Jörg
PCFJKG
PCFJKG 21.06.2012 um 12:06:10 Uhr
Goto Top
Hallo Jörg und vielen Dank für die schnelle Antwort. In Deinem Link steht unter anderem

...
Ein Bezeichner, der mit einem doppelten Nummernzeichen (##) beginnt, steht für ein globales .......
...

und damit wird das doppelte Nummernzeichen also explixit erlaubt - also leider liegt das Problem anders. Aber wie gesagt:

Vielen Dank für Deine Hilfe.

Freundliche Grüße
PCFJKG
LianenSchwinger
LianenSchwinger 21.06.2012 aktualisiert um 12:45:09 Uhr
Goto Top
Bei näherer Betrachtung handelt es sich ja garnicht um einen Bezeichner sondern um den Inhalt einer Variablen. Könnte es sein, dass bei der Verwendung des Variableninhalts den '#'ern irgendwie ein '/' oder dergleichen vorangestellt werden muss um eine richtige Interpretation zu erreiche.

Bei Oracle muss ich z.B.

SELECT last_name
FROM employees
WHERE last_name LIKE '%A\_B%' ESCAPE '\';  

mitteilen, dass der Unterstrich mittels '\' ein Zeichen ist und nicht der Platzhalter für ein beliebiges Zeichen.

Gruß Jörg