2017-02-16 1 views
1

aktualisieren Frageeinige Probleme zu haben dementsprechend eine gespeicherte Prozedur (falsche Syntax in der Nähe von ‚end‘)

Changed die gespeicherte Prozedur zu schaffen, aber es wird keine Werte aus irgendeinem Grund zurückkehrt, obwohl ich RETURN @UserID rechts hinzugefügt über dem letzten END.

Update 2

Ordnung egal, es ist nur Entity Framework, die mich zu necken ist. Ich habe gerade versucht, die gespeicherte Prozedur von SSMS ausgeführt und es funktionierte gut :)

Ich habe einige meiner anderen gespeicherten Prozeduren kopiert, aber jedes Mal, wenn meine Anforderungen für sie ändern, und so tut der Inhalt von ihnen. Ich bin mir nicht sicher, was ich dieses Mal falsch gemacht habe. Könnte mir bitte jemand in die richtige Richtung zeigen?

CREATE PROCEDURE [dbo].[GetUserID] 
( 
    -- Add the parameters for the function here 
    @UUID varchar(36), 
    @SuperID varchar(33) 
) 
AS 
BEGIN 
    SET NOCOUNT ON 
    SET ARITHABORT ON 

    DECLARE @SuperIDExists bit 
    DECLARE @UserID int 

    SELECT @SuperIDExists = CASE 
           WHEN EXISTS (SELECT * 
              FROM dbo.[Users] AS u 
              WHERE u.SuperID = @SuperID) 
            THEN CAST(1 as bit) 
            ELSE CAST(0 as bit) 
          END 

    IF @SuperIDExists = 1 
    BEGIN 
     SELECT @UserID = (SELECT u.ID 
          FROM dbo.[Users] AS u 
          WHERE u.SuperID = @SuperID) 
    END 
    ELSE 
    BEGIN 
     SELECT @UserID = (SELECT u.ID 
          FROM dbo.[Users] as U 
          WHERE u.UUID = @UUID) 
    END 

Der Fehler, den ich bekommen ist:

Msg 102, Ebene 15, Status 1, Prozedur GetUserID, Linie 45 [Batch Startlinie 9]
falsche Syntax in der Nähe von 'END'

+0

In einer mehr 'END' vor dem' GO'. – DVT

+0

Sie fehlen Ende in der letzten. Der Prozedurhauptteil wurde mit Begin gestartet. Aber es gibt kein Ende –

+0

Das hat funktioniert! Aber warum? Ist nicht jedes ENDE von einem BEGIN begleitet? –

Antwort

3

Sie vermissen die endgültige END in Ihrem Skript (vor der GO).

Korrigierte Script:

CREATE PROCEDURE [dbo].[GetUserID] 
( 
    -- Add the parameters for the function here 
    @UUID varchar(36), 
    @SuperID varchar(33) 
) 
AS 
BEGIN 
SET NOCOUNT ON 
SET ARITHABORT ON 

DECLARE @SuperIDExists bit 
DECLARE @UserID int 

SELECT @SuperIDExists = 
    CASE WHEN EXISTS (
    SELECT * 
    FROM dbo.[Users] AS u 
    WHERE u.SuperID = @SuperID 
    ) 
    THEN CAST(1 as bit) 
    ELSE CAST(0 as bit) 
END 

IF @SuperIDExists = 1 
BEGIN 
    SELECT @UserID = 
    (SELECT u.ID 
    FROM dbo.[Users] AS u 
    WHERE u.SuperID = @SuperID) 
END 

ELSE 
BEGIN 
    SELECT @UserID = 
    (SELECT u.ID 
    FROM dbo.[Users] as U 
    WHERE u.UUID = @UUID) 
END 
END -- <------- ADDED `END` 

GO 
+0

Ja, danke. Obwohl ich jetzt eine andere Frage habe. Wie gebe ich die Variable @UserID zurück? Das Entitätsframework sagt mir, dass die gespeicherte Prozedur keine Werte zurückgibt. –

+0

Ich habe versucht, RETURN @UserID über dem letzten END hinzuzufügen, aber es gibt immer noch nichts zurück. –

+0

Tut mir leid, ich bin nicht vertraut mit gespeicherten SQL Server-Prozeduren. Das wäre eine Frage für jemand anderen. Ich habe gerade das fehlende 'END' gesehen und konnte darauf hinweisen. :) –

Verwandte Themen