"Erklären muß, die Skalare variable" Fehler beim ausführen einer gespeicherten Prozedur
Habe ich versucht zu machen, ein Verfahren zum einfügen eines Preis:
create procedure prInsertPrice
@NuggetID varchar(5),
@Unit_Price money,
@Start_Date datetime,
@End_Date datetime
as
begin
DECLARE @date AS DATETIME
SET @date = GETDATE()
if
(
(@NuggetID like 'N[0-9][0-9]')
and
(@Unit_Price is not null)
and
(@Start_Date is not null)
)
begin
print 'Insert Success'
insert NuggetPrice (NuggetId, Unit_Price, Start_Date, End_Date)
values (@NuggetID, @Unit_Price, @Start_Date, @End_Date)
end
else
begin
print 'Failed to insert'
end
end
Wenn ich die Prozedur auszuführen, es ist in Ordnung, aber wenn ich das Verfahren so:
EXEC prInsertPrice 'N01', 20000, @date, null
Bekomme ich die Fehlermeldung:
Erklären muß, die Skalare variable @Datum.
Warum ist das so und wie kann ich das problem beheben?
- Die Fehlermeldung ist doch ziemlich klar, Sie haben zum hinzufügen von
DECLARE @date datetime
und setzen Sie diese variable in der gleichen charge wie Sie laufen den exec. - Manchmal hilft es, zu wissen, was Sie versuchen zu tun, bevor wir geben können, eine akzeptable Antwort. so... WAS WAR IHRE ABSICHT HIER? was hast du erwartet zu geschehen?
- Ich bin versucht, erstellen Sie eine Prozedur, wird in der Lage sein zu tun, legen Sie basierend auf dem Inhalt der procedur. Auch hier habe ich ein problem mit Deklaration von Variablen, die ich war erforderlich, um
getdate()
- Funktion, um die aktuelle Uhrzeit, wenn die exec proc. sorry für schlechtes Deutsch, ist nicht meine Muttersprache.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das @Datum in der exec-Anweisung ist verschiedenen dann die gespeicherte Prozedur.
Sollten Sie so etwas tun:
Beim ausführen:
Übergeben Sie die variable
@date
als Dritter parameter an die gespeicherte Prozedur, wie@Start_Date
. Dies ist völlig unabhängig von der@date
Variablen, die Sie deklariert haben innen der gespeicherten Prozedur selbst, die wird deklariert und initialisiert nach das Verfahren wurde genannt, als es ausführt.Wenn Sie nicht initialisiert den
@date
variable, die übergeben wird als parameter an die gespeicherte Prozedur vor dem Aufruf der gespeicherten Prozedur ein, dann erhalten Sie die Fehlermeldung, die Sie beschrieben haben.So, müssen Sie deklarieren und initialisieren Sie diese variable Erstens:
Dies sollte den Fehler vermeiden.
Hinweis: Sie können auch trennen Sie die Deklaration und Initialisierung der
@date
variable, wenn Sie bevorzugen würden:In der Adressierung Ihrer zugrunde liegenden problem-oder verhindert schlechte Daten eingefügt in Ihre
NuggetPrice
Tabelle, aber ich würde Zustimmen Prdp's Vorschlag, das hinzufügen einerCHECK
Einschränkung auf die Tabelle, zum Beispiel:Dies würde auch verhindern, dass jemand aus dem einfügen von Datensätzen, die nicht einverstanden sind mit der Logik angegeben.
Schon zwei andere Antworten gab genügend Informationen über den Grund für die Fehlermeldung werde mich nicht darüber zu reden. Hier ist der unterschiedliche Ansatz zur Lösung des Daten-Validierung
Anstatt eine
Stored Procedure
einzuschränken einfügen von fehlerhaften Daten in die Tabelle, ich schlage vor, Sie erstellen eineCheck constraint
dazuWird dies sicher niemand fügt falsche Daten in
NuggetPrice