SQL Server : verwenden Sie bigint-Variablen in der gespeicherten Prozedur
Sehr einfach, ich rufe ein Verfahren, um die Primärschlüssel aus einer Tabelle, die Speicherung der Schlüssel in einer Variablen, so dass ich kann, dann verwenden Sie zum einfügen in einer anderen Tabelle muss ein Fremdschlüssel. Die variable ist das, was ich erwartet es zu sein, aber wenn ich es benutze, es gibt nichts zurück.
Nach dem Versuch, es zu betrachten, es scheint zu sein, dass Ihr ein Problem mit der WHERE
- Klausel und der Verwendung der variable
DECLARE @ClientId bigint;
SELECT *
FROM Testing.dbo.Client
WHERE ClientID = @ClientId
@ClientId
Wert ist 2
Es ist ein Wert von 2 für eine als eine client-ID in der Tabelle
Wenn ich diesen starte, bekomme ich das Ergebnis erwarte ich
select *
from Testing.dbo.Client
where ClientID = 2
Dies ist, wo es festgelegt wird,
DECLARE @ClientId int;
EXECUTE @ClientId = Testing.dbo.GetClientID @ClientName;
Wo GetClientID ist folgende
USE Testing
GO
CREATE PROCEDURE GetClientId
@ClientName nvarchar(50)
AS
SELECT ClientID FROM Testing.dbo.Client WHERE ClientName = @ClientName
GO
Gearbeitet, ein bisschen mehr jetzt, so die ClientId wird nicht immer gesetzt nach Aufruf der proc
- wo/wie legen Sie den Wert von @ClientId? Weil in deinem snippet, du bist nur zu deklarieren, nicht der Zuweisung eines Wertes.
- Während Sie initialisieren kann in der
declare
wie in der Antwort unten, würden Sie verwenden in der Regelset
wie inset @ClientId = 2;
. In der Tat, die alte Versionen von SQL Server können Sie nicht tun, die inline-Initialisierung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie initalize variable ansonsten enthält
NULL
;Wenn Sie es in der argument-Liste erstellen Sie keine variable mit diesem Namen:
Wenn Sie versuchen, eine variable, eine Prozedur speichern, ist dies der richtige Weg:
Wenn Sie Ihren Shop Verfahren wirft viele Zeilen ändern, die
=
fürIn
wie diese:Habe ich es geschafft, es klappt mit OUTPUT-Variablen, die ich hatte nicht vor
Wo proc GetClientId war
Bitte lassen Sie mich wissen, wenn Sie glauben, dass dies der beste Weg, dies zu tun, oder ob es einen besseren Weg, es zu tun.
AddReading
gespeicherten Prozedur. Es sei denn, die Logik ist Komplex und wird wiederverwendet, indem Sie andere Dinge, weil es so Komplex ist.USE Testing
warum würden SieEXEC Testing.dbo.blahblah
undINSERT INTO Testing.dbo.blahblah
?wenn Sie verwenden möchten, wie diese:
können Sie RETURN @ClientID in der Prozedur