none
wert aus einer tabelle einer deklarierten Variable zuweisen/ Stored procedure RRS feed

  • Frage

  • Hallo,

    ich habe folgende Test stored procedure in der ich gerne mittels des übergebenen Wertes(NT_USER), einen Wert(Contact_ID) aus einer Tabelle(ContactAdministration) holen und der selbst deklarierten Variable @Contact_ID übergeben. Ich mache das. um später mit dieser variable weiterarbeiten zu können.

     

    Mein Problem ist folgende Fehlermeldung:

    Error in SELECT clause: expression near '='.
    Unable to parse query text. :-)

     

    Würde mich sehr freuen wenn mir jemand helfen könnte. Danke

     

    ALTER PROCEDURE dbo.StoredProcedure3

    (
    @NT_USER char
    )

    AS
    DECLARE @Contact_ID int

    SELECT     @Contact_ID = Contact_ID
    FROM         ContactAdministration
    WHERE     NT_USER = @NT_USER
    RETURN
    Freitag, 13. Januar 2012 15:35

Antworten

  • Hallo,

    so wie es da steht, sollte der Fehler nicht kommen.

    Eine funktionierende Variante (mit dem entsprechenden Tabellenfragment):

    USE tempdb;
    GO
    
    CREATE TABLE ContactAdministration (
        Contact_ID int NOT NULL,
        NT_USER varchar(10) NOT NULL);
    
    INSERT INTO ContactAdministration VALUES(4711, 'ABC'), (4712, 'DEF');
    GO
    
    CREATE PROCEDURE dbo.StoredProcedure3
    (
        @NT_USER varchar(10)
    )
    AS
        DECLARE @Contact_ID int;
    
        SELECT @Contact_ID = Contact_ID
            FROM ContactAdministration
            WHERE NT_USER = @NT_USER;
    
        -- ... weiter...
        -- SELECT @Contact_ID AS Contact_ID
    GO
    
    EXEC dbo.StoredProcedure3 @NT_USER = 'ABC'
    GO
    

    Und da vermutlich Dein NT_USER einen längeren Namen als ein Zeichen haben wird -
    denn char entspricht einem char(1) ist - habe ich die Länge mal auf 10 Zeichen erhöht.

    Weiteres siehe SELECT @Variable.

    Eine weitere Frage wäre, wie Du weiterarbeiten willst:
    Innerhalb der Prozedur selbst oder möchtest Du den Wert an eine Anwendung zurückgegeben?

    Gruß Elmar

    P.S.: Solche Fragen wären besser im SQL Server Forum aufgehoben.

    Freitag, 13. Januar 2012 16:21
    Beantworter
  • Hallo,

    die Tabelle ist - wie auch angedeutet -  der Vollständigkeithalber vorhanden, damit der Code für Prozedur testbar wird.
    Du darfst natürlich Deine vollständigere Tabelle verwenden.

    Der Abfrage Editor vom SSMS kann mit Prozeduren nichts anfangen, sondern nur dabei helfen einfache Abfragen zu erstellen.
    Prozeduren wirst Du in einem Abfragefenster erstellen und testen müssen, wie oben gezeigt.

    Gruß Elmar

    Montag, 16. Januar 2012 15:04
    Beantworter
  • Hallo Robert,

    danke der Nachfrage. Das Problem lag daran, dass der Query Builder im VS 2010, kein T-SQL versteht.

    Hat mir ein Freund erzählt. Ich nehme an, dass das auch stimmt.

     

    Grüße

    intern2011

    Montag, 30. Januar 2012 13:22

Alle Antworten

  • Hallo,

    so wie es da steht, sollte der Fehler nicht kommen.

    Eine funktionierende Variante (mit dem entsprechenden Tabellenfragment):

    USE tempdb;
    GO
    
    CREATE TABLE ContactAdministration (
        Contact_ID int NOT NULL,
        NT_USER varchar(10) NOT NULL);
    
    INSERT INTO ContactAdministration VALUES(4711, 'ABC'), (4712, 'DEF');
    GO
    
    CREATE PROCEDURE dbo.StoredProcedure3
    (
        @NT_USER varchar(10)
    )
    AS
        DECLARE @Contact_ID int;
    
        SELECT @Contact_ID = Contact_ID
            FROM ContactAdministration
            WHERE NT_USER = @NT_USER;
    
        -- ... weiter...
        -- SELECT @Contact_ID AS Contact_ID
    GO
    
    EXEC dbo.StoredProcedure3 @NT_USER = 'ABC'
    GO
    

    Und da vermutlich Dein NT_USER einen längeren Namen als ein Zeichen haben wird -
    denn char entspricht einem char(1) ist - habe ich die Länge mal auf 10 Zeichen erhöht.

    Weiteres siehe SELECT @Variable.

    Eine weitere Frage wäre, wie Du weiterarbeiten willst:
    Innerhalb der Prozedur selbst oder möchtest Du den Wert an eine Anwendung zurückgegeben?

    Gruß Elmar

    P.S.: Solche Fragen wären besser im SQL Server Forum aufgehoben.

    Freitag, 13. Januar 2012 16:21
    Beantworter
  • Hallo Elmar,

    vielen dank für deine antwort. Die Tabelle ContactAdministration besteht ja schon. Deshalb verstehe ich den nutzen des create befehls nicht ganz.

    ja, ich würde den wert in der gleichen Prozedur verwenden. Das komische ist, das eine ähnliche anweisung auch in einer anderen Prozedur schon verwendet wird und eigentlich auch klappen muss. Die Fehlermeldung erscheint allerdings nur, wenn ich versuche die anweisung mit den Query-Builder einzeln auszuführen.

    Liebe Grüße

    intern2011

     

    -----------------------------------------------------------------------------------------------------------------------------------------------

    Denn so sehr hat Gott die Welt geliebt, dass er seinen eingeborenen Sohn gab, damit jeder der an ihn glaubt nicht verloren gehe, sondern ewiges leben haben. Die Bibel nach Johannes 3,16

    Sonntag, 15. Januar 2012 22:11
  • Hallo,

    die Tabelle ist - wie auch angedeutet -  der Vollständigkeithalber vorhanden, damit der Code für Prozedur testbar wird.
    Du darfst natürlich Deine vollständigere Tabelle verwenden.

    Der Abfrage Editor vom SSMS kann mit Prozeduren nichts anfangen, sondern nur dabei helfen einfache Abfragen zu erstellen.
    Prozeduren wirst Du in einem Abfragefenster erstellen und testen müssen, wie oben gezeigt.

    Gruß Elmar

    Montag, 16. Januar 2012 15:04
    Beantworter
  • Hallo intern2011,

    Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert


    Robert Breitenhofer, MICROSOFT  Twitter Facebook
    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Freitag, 27. Januar 2012 18:13
    Moderator
  • Hallo Robert,

    danke der Nachfrage. Das Problem lag daran, dass der Query Builder im VS 2010, kein T-SQL versteht.

    Hat mir ein Freund erzählt. Ich nehme an, dass das auch stimmt.

     

    Grüße

    intern2011

    Montag, 30. Januar 2012 13:22