Announcement

Collapse
No announcement yet.

Problem mit Exec (@SQL)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit Exec (@SQL)

    Hallo,<BR>
    Ich habe ein Problem mit folgender Anweisung und verstehe nicht warum. Vielleicht könnte ihr mir helfen?<BR>
    <B>
    Delare @SQL Varchar(255)<BR>
    Declare @Arc_Seq Integer<BR>
    Select @SQL = 'Select @Arc_Seq = (Select Arc_Seq from TP_Chkarc_2004_1 Where Store_id=1 and rvc_obj=1 and ChkNo = 1)';<BR>
    EXEC (@SQL);<BR>
    </B>
    ==> Fehlermeldung : Die Variable '@Arc_Seq' muss deklariert werden.<BR>

    Die Variable @Arc_seq ist doch definiert, oder?

    Ich freue mich auf jede Antwort und bedanke ich mich ganz herzlich <BR> <BR>
    Gruß<BR>
    Khanh-Le

  • #2
    Hallo NgocKhanhLe,

    Ich bin zum ersten Mal hier und las deine Anfrage. Das ist meine Antwort:

    Grundsätzlich ist die Anwendung sowohl des Befehls als auch der Logik ist bei diesem Beispiel falsch:

    1. Alles was in dem EXEC ausgeführt wird, so man als eine externe Prozedure betrachten.
    Wenngleich SQL Server für die Bildung der SQL-Anweisung die Variablen von ausserhalb der EXEC-Zeichenfolge benutzen kann, sind alle Variablen, denen in der gebildeten Zeichenfolge ein Wert zugeordnet ist, nich von ausserhalb der EXEC-Anweisung zugänglich.

    2. Die EXEC-Anweisung führt aus, liefert aber keine Ergebnisse zurück, da keine RETURN-Möglichkeit besteht. Dafür benutzt man die SP (Stored Prozedures). Deswegen macht diese Anweisung keinen Sinn. Die Ausgaben die man erleben darf, wenn eine EXEC-Anweisung ausgeführt wird, werden nur in dem Query Analyser ausgegeben, weil dieser als Ausgabe-Display benutzt wird.

    3. Mein Vorschlag:

    a) Grundsätzlich gewöhne dich daran die SQL-Anweisungen, Befehle, Typen usw. in Grossbuchstaben zu schreiben.

    b) Deklariere eine SP, die als eingabe aller Parameter erwartet und einen gesuchten Wert zurückt gibt. z.B.
    <PRE>
    CREATE PROCEDURE ASP_ARC_SEQ_GET
    (
    @Store_id INTEGER,
    @rvc_obj INTEGER,
    @ChkNo INTEGER,
    @Arc_Seq INTEGER OUTPUT
    )
    AS
    BEGIN

    SELECT @Arc_Seq = Arc_Seq from TP_Chkarc_2004_1 Where Store_id = @Store_id and rvc_obj = @rvc_obj and ChkNo = @ChkNo

    END
    </PRE>

    Dann kannst du diese SP so aufrufen.
    <PRE>
    DECLARE @Arc_Seq INTEGER

    EXEC ASP_ARC_SEQ_GET 1, 1, 1, @Arc_Seq OUTPUT
    </PRE>

    Dann steht bei dir den Wert in der @Arc_Seq-Variable.

    Wenn du diesen Wert aber aus dem Programm suchst, brauchst du den EXEC nicht mehr. Der Aufruf einer SP und die Festlegung aller Parametern kann man auch im Programm erledigen, z.B. im VB.NET oder anderen...

    Mf

    Comment

    Working...
    X