AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Skalarvariable muss deklariert werden
Thema durchsuchen
Ansicht
Themen-Optionen

Skalarvariable muss deklariert werden

Ein Thema von Jens Schumann · begonnen am 30. Mär 2009 · letzter Beitrag vom 25. Apr 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#1

Skalarvariable muss deklariert werden

  Alt 30. Mär 2009, 13:10
Datenbank: MS SQL-Server • Version: 2005 • Zugriff über: ADO
Hallo,
ich habe ein Problem in einer Stored-Procedure.
Ich möchte gerne innerhalb der Stored-Procedure Zwischenergebnisse in einer Tabellenvariablen speichern.
Grundsätzlich funktioniert das auch ganz gut. Nur kann ich nicht immer wie gewohnt auf die Variable zugreiffen.
 WHERE (hyp_planning.HSP_OBJECT.OBJECT_NAME =@tpe_upl_references.position) and An dieser Stelle verursacht folgende Fehlermeldung:
Code:
Meldung 137, Ebene 15, Status 2, Prozedur ListTree3, Zeile 43
Die "@tpe_upl_references"-Skalarvariable muss deklariert werden.
Wie kann ich das Problem lösen?

Hier die komplette Stored-Procedure
SQL-Code:
CREATE Procedure [dbo].[ListTree3] @NODETEXT VARCHAR(80)
as
begin
set nocount on
declare @ChildID int

declare @tpe_upl_references Table
(
  ID INT,
  PARENTID INT,
  POSITION VARCHAR(80) COLLATE SQL_Latin1_General_CP1_CI_AS,
  ALIAS VARCHAR(80) COLLATE SQL_Latin1_General_CP1_CI_AS,
  HASCHILDREN INT,
  GENERATION INT,
  RELPOSITION INT
)
-- 1.Zeile in die Tabelle
--
insert into @tpe_upl_references
  select object_ID, Parent_ID, object_name,null as alias, has_children, Generation,Position from hyp_planning.hsp_object
    where (object_name = @NODETEXT) and ((object_type=32) or (object_type=33) or (object_type=2)or (object_type=50))

Declare c Cursor local for select ID from @tpe_upl_references
open c
fetch next from c into @ChildID
while @@Fetch_status = 0 begin
--
-- Mit jedem Schleifendurchlauf werden in einem Abwasch ALLE Kindknoten eingefügt
--
  insert into @tpe_upl_references
    select object_ID,Parent_ID,object_name,null as alias,has_children, Generation,Position from hyp_planning.hsp_object where Parent_ID = @ChildID
  fetch next from c into @ChildID
end
close c
deallocate c


update @tpe_upl_references set alias= (SELECT HSP_OBJECT_1.OBJECT_NAME AS ALIAS
                          FROM hyp_planning.HSP_OBJECT AS HSP_OBJECT_1 INNER JOIN
                                 hyp_planning.HSP_ALIAS ON HSP_OBJECT_1.OBJECT_ID = hyp_planning.HSP_ALIAS.ALIAS_ID RIGHT OUTER JOIN
                                 hyp_planning.HSP_OBJECT ON hyp_planning.HSP_ALIAS.MEMBER_ID = hyp_planning.HSP_OBJECT.OBJECT_ID
                          WHERE (hyp_planning.HSP_OBJECT.OBJECT_NAME =@tpe_upl_references.position) and (hyp_planning.HSP_ALIAS.ALIASTBL_ID=14) )

set nocount off
select * from @tpe_upl_references order by id,relposition


END
Ohne das Update funktioniert die Stored-Procedure mit der Tabellenvariablen einwandfrei. Wenn ich anstatt der Tabellenvariablen das Zwischenergebnis in die tempdb schreibe funktioniert es auch mit dem update tadellos.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Skalarvariable muss deklariert werden

  Alt 9. Apr 2009, 10:44
Hallo,
leider konnte ich hier noch keine Lösung finden.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Skalarvariable muss deklariert werden

  Alt 24. Apr 2009, 20:01
So vielleicht?
SQL-Code:
update @tpe_upl_references
  set alias= HSP_OBJECT_1.OBJECT_NAME
from
    hyp_planning.HSP_OBJECT AS HSP_OBJECT_1
INNER JOIN
    hyp_planning.HSP_ALIAS
      ON HSP_OBJECT_1.OBJECT_ID = hyp_planning.HSP_ALIAS.ALIAS_ID
RIGHT OUTER JOIN
  hyp_planning.HSP_OBJECT
    ON hyp_planning.HSP_ALIAS.MEMBER_ID = hyp_planning.HSP_OBJECT.OBJECT_ID
WHERE
    (hyp_planning.HSP_OBJECT.OBJECT_NAME =position)
an (hyp_planning.HSP_ALIAS.ALIASTBL_ID=14)
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Skalarvariable muss deklariert werden

  Alt 25. Apr 2009, 15:07
Hallo alzaimar,
vielen Dank für Deinen Tip.
SQL-Code:
update @tpe_upl_references set alias= (SELECT HSP_OBJECT_1.OBJECT_NAME AS ALIAS
                          FROM hyp_planning.HSP_OBJECT AS HSP_OBJECT_1 INNER JOIN
                                 hyp_planning.HSP_ALIAS ON HSP_OBJECT_1.OBJECT_ID = hyp_planning.HSP_ALIAS.ALIAS_ID RIGHT OUTER JOIN
                                 hyp_planning.HSP_OBJECT ON hyp_planning.HSP_ALIAS.MEMBER_ID = hyp_planning.HSP_OBJECT.OBJECT_ID
                                 INNER JOIN @tpe_upl_references ON hyp_planning.HSP_OBJECT.OBJECT_NAME = position
                          WHERE (hyp_planning.HSP_ALIAS.ALIASTBL_ID=14) )
Das Statement erzeugt innerhalb der Stored Procedure beim Versuch eben diese anzulegen folgende Fehlermeldung
Code:
Meldung 209, Ebene 16, Status 1, Prozedur ListTree3, Zeile 43
Mehrdeutiger Spaltenname 'position'.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Skalarvariable muss deklariert werden

  Alt 25. Apr 2009, 15:09
Du hast position auch nicht weiter spezifiziert. Gebe dort auch noch den Alias an
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Skalarvariable muss deklariert werden

  Alt 25. Apr 2009, 15:15
Zitat von mkinzler:
Du hast position auch nicht weiter spezifiziert. Gebe dort auch noch den Alias an
Ich weis aber nicht welchen Alias ich dort angeben soll.

Wenn ich einen Alias mit ... JOIN @tpe_upl_references tur ON ... in der Abfrage für @tpe_upl_references
angeben wird die Stored Procedure zwar kompiliert und bei Aufruf wird auch eine Ergebnismenge geliefert.
Aber leider mit einem Fehler beendet.

SQL-Code:
update @tpe_upl_references set alias= (SELECT HSP_OBJECT_1.OBJECT_NAME AS ALIAS
                          FROM hyp_planning.HSP_OBJECT AS HSP_OBJECT_1 INNER JOIN
                                 hyp_planning.HSP_ALIAS ON HSP_OBJECT_1.OBJECT_ID = hyp_planning.HSP_ALIAS.ALIAS_ID RIGHT OUTER JOIN
                                 hyp_planning.HSP_OBJECT ON hyp_planning.HSP_ALIAS.MEMBER_ID = hyp_planning.HSP_OBJECT.OBJECT_ID
                                 INNER JOIN @tpe_upl_references tur ON hyp_planning.HSP_OBJECT.OBJECT_NAME =tur.position
                          WHERE (hyp_planning.HSP_ALIAS.ALIASTBL_ID=14) )
Hier die Feherlmeldung mit der die Stored Procedure beendet.
Code:
Meldung 512, Ebene 16, Status 1, Prozedur ListTree3, Zeile 39
Die Unterabfrage hat mehr als einen Wert zurückgegeben. Das ist nicht zulässig, wenn die Unterabfrage auf =, !=, <, <=, > oder >= folgt oder als Ausdruck verwendet wird.
Die Anweisung wurde beendet.

(466 Zeile(n) betroffen)
I come from outer space to save the human race
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Skalarvariable muss deklariert werden

  Alt 25. Apr 2009, 17:29
Dann liefert das SELECT wohl mehr als einen Wert zurück.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Skalarvariable muss deklariert werden

  Alt 25. Apr 2009, 17:37
Zitat von alzaimar:
Dann liefert das SELECT wohl mehr als einen Wert zurück.
Das wird wohl stimmen.
Mit der tempdb funktioniert die Stored Procedure einwandfrei. Mit der Tabellenvariablen nicht.
Das verstehe ich nicht.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Skalarvariable muss deklariert werden

  Alt 25. Apr 2009, 20:33
sehr eigenartig. Was liefern denn die SELECT Befehle für die einzelnen Zeilen? Vielleicht reicht ein 'SELECT TOP 1'?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Skalarvariable muss deklariert werden

  Alt 25. Apr 2009, 20:39
mit
SQL-Code:
update @tpe_upl_references set alias= (SELECT Top (1) HSP_OBJECT_1.OBJECT_NAME AS ALIAS
                          FROM hyp_planning.HSP_OBJECT AS HSP_OBJECT_1 INNER JOIN
                                 hyp_planning.HSP_ALIAS ON HSP_OBJECT_1.OBJECT_ID = hyp_planning.HSP_ALIAS.ALIAS_ID RIGHT OUTER JOIN
                                 hyp_planning.HSP_OBJECT ON hyp_planning.HSP_ALIAS.MEMBER_ID = hyp_planning.HSP_OBJECT.OBJECT_ID
                                 INNER JOIN @tpe_upl_references tur ON hyp_planning.HSP_OBJECT.OBJECT_NAME =tur.position
                          WHERE (hyp_planning.HSP_ALIAS.ALIASTBL_ID=14) )
funktioniert es ohne Fehlermeldung.
Bin mir aber nicht sicher ob auch alle Datenensätze angezeigt werden.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz