pcfjkg
Goto Top

SET Lokale Variable in SQL auf einem 2000 SERVER

SET @local_variable akzeptiert keine Variablen bei Ausführung von EXEC

Es geht um eine gespeicherte Prozedur in einem MS-Access Projekt.
Alter Procedure <Proz_Name>
(
	@<Variable> char(4),
)
As

DECLARE @CmdStr varchar(2000)
DECLARE @VariableTest decimal(5,2)
/* Angenommen, Spalte_y wird nach dem Wert 20 abgefragt */

SET @<VariableTest> = (SELECT SUM(<Spalte_x>) FROM <Table> WHERE (<Spalte_y> = 20))

/* Die @<Variabletest> enthält ordnungsgemäß die Summe. */

Nun soll Spalte_y nach dem jeweils in @<Variable> beim Aufruf übergebenen Wert abgefragt werden
SET @CmdStr = 'SET @<VariableTest> = (SELECT SUM(<Spalte_x>) FROM <Table> WHERE (<Spalte_y> = ' + @<Variable> + '))'  
EXEC(@CmdStr)

/* Die @<VariableTest> enthält NULL. */
Syntax ? EXEC bei SET nicht zuässig ? oder ?

Ich vermute, dass @<VariableTest> im Fall "SET @cmdstr ..." als beliebige Zeichenfolge (im Gesamtstring) an @cmdstr übergeben wird und nicht als deklarierte Variable erkannt wird. Wie aber kann das erreicht werden ?
PCFJKG

Content-ID: 93862

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

Ausgedruckt am: 24.11.2024 um 04:11 Uhr

Biber
Biber 07.08.2008 um 18:06:58 Uhr
Goto Top
Moin PCFJKG,

Nachfragen:
  • willst Du denn die VariableTest gar nicht nach aussen reichen oder wird die im weiteren Verlauf der SP verwendet...??
  • wäre nicht ein "Select.....INTO @variabletest ..." eher der übliche Weg?

Grüße
Biber
PCFJKG
PCFJKG 07.08.2008 um 20:27:14 Uhr
Goto Top
Hi Biber,

ich wollte die Variable im weiteren Verlauf der Prozedur verwenden weil ich mein(t)e, dass diese als Abfragekriterium einfacher zu handaben ist als eine Table. Ich dachte bisher, dass "SELECT .... INTO" in eine Variable nicht möglich ist (sondern nur in eine Tabelle), werde es aber gleich ausprobieren. Um weiterzukommen wäre eine ##Table mit nur einer Spalte und dort wiederum nur einer Zeile auch möglich; und ##Tables stören und belasten im Prinzip nicht, wenn es denn nicht zu viele sind ... Insoweit komme ich Dank des Tipps zunächst sicher weiter voran, auch wenn es vielleicht nicht die eleganteste Lösung ist.

Danke für die Antwort, vielleicht bis demnächst

PCFJKG