2016-07-19 12 views
0

Ich möchte eine Prozedur schreiben, die 3 Spalten zurückgibt, die letzte Spalte existiert nicht in der ursprünglichen Tabelle, es ist ein Zeitunterschied, den ich zwischen LastLogin und erhalten möchte die aktuelle Zeit, aber ich weiß nicht, wie ich es schreiben soll. Bisher habe ich das, aber ich bin mir nicht einmal sicher, ob es so ist.Wie füge ich in eine temporäre Tabelle mit einer zusätzlichen Spalte ein

ALTER PROCEDURE sp_W_getSesionSupervisor 
@Plaza varchar(255), 
@UserLevel int 

DECLARE @tempSupervisor TABLE (
    UserName varchar(255), 
    LastLogin DATETIMEOFFSET, 
    tTranscurrido DATETIMEOFFSET 
); 
BEGIN 
    INSERT INTO @tempSupervisor (UserName, LastLogin) 
    SELECT UserName, LastLogin FROM UsersAdmin 
    WHERE Plaza = @Plaza AND UserLevel = @UserLevel 

    UPDATE @tempSupervisor 
    SET tTranscurrido = DIFFERENCE(LastLogin, DateTimeOffset) 

    SELECT * FROM @tempSupervisor 
END 

Antwort

1

Das gleiche Ergebnis kann durch eine einzelne SELECT-Anweisung, wie die unter einem zurückgeschickt werden. Ist das Verfahren erforderlich?

SELECT Benutzername, Lastlogin, Differenz (Lastlogin, Datetimeoffset) VON UsersAdmin WHERE Plaza = @Plaza und Userlevel = @UserLevel

@Plaza und @UserLevel würden die Parameter für die Abfrage sein. Sie können die Parameter überspringen, wenn diese nicht benötigt werden.

+0

Ich sehe, ich wusste nicht, dass ich eine Operation in der Mitte einer Auswahl schreiben könnte ... Ich nehme an, dass ich nur "AS tTranscurrido" nach der UNTERSCHIED() schreiben muss, oder? Und ja, es muss tatsächlich in einer Prozedur sein, aber auf jeden Fall löst diese Antwort es definitiv. Ich muss nur 5 Minuten warten, um das offiziell zu machen. – dreami