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-Key: 186835

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

Printed on: April 23, 2024 at 06:04 o'clock

Member: LianenSchwinger
LianenSchwinger Jun 21, 2012 updated at 09:44:47 (UTC)
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
Member: PCFJKG
PCFJKG Jun 21, 2012 at 10:06:10 (UTC)
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
Member: LianenSchwinger
LianenSchwinger Jun 21, 2012 updated at 10:45:09 (UTC)
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