2016-07-16 16 views
0

Alles, was ich versuche, ist eine Variable namens @ReservationID zu deklarieren, initialisieren Sie es auf einen Wert aus der Reservierung Tabelle, wo bestimmte Bedingungen existieren, und verwenden Sie diesen Wert als Parameter zum Einfügen eines neuen Folio Tabelleneintrag Wenn ich meine Folio-Tabelle drucke, existiert der neue Tabelleneintrag nicht. Ich habe überprüft und die SELECT Anweisung ausgeführt, und es kommt mit dem richtigen Wert basierend auf den Bedingungen. Initiiere oder übergebe ich die Variable nicht korrekt? Was fehlt mir hier? Jede Hilfe wäre willkommen.SQL-Variable als INSERT INTO Wert

DECLARE @ReservationID smallint; 
SET @ReservationID = (SELECT ReservationID FROM Reservation WHERE ReservationDate = CONVERT(varchar, GETDATE()) AND CreditCardID = 1) 

SET IDENTITY_INSERT Folio OFF 
INSERT INTO Folio (ReservationID, GuestID, RoomID, QuotedRate, CheckinDate, Nights, Status, Comments, DiscountID) 
VALUES(@ReservationID, 500, 20, 35.50, '07/24/2016', 3, 'R', NULL, 1); 
+0

In den Registerkarte Nachrichten der Ergebnisse, was keine der betroffenen Zeilen u bekommen? – niksofteng

+0

Code sieht korrekt aus. Die einzige Anforderung für @ReservationID ist, dass die Unterabfrage nur einen Wert zurückgeben darf (Sie können dafür top (1) verwenden). Ist 'Reservierungs-ID' die IDENTITY-Spalte? –

Antwort

0

Möglicherweise initialisieren oder übergeben Sie die Variable nicht korrekt.

Siehe MSDN Here zum Zuweisen einer Variablen zum Wert eines Ausdrucks.

Sie müssen die SET & IDENTITY_INSERT wie unten zu korrigieren,

DECLARE @ReservationID smallint; 
select @ReservationID = ReservationID FROM Reservation 
WHERE ReservationDate = CONVERT(varchar, GETDATE()) AND CreditCardID = 1 

SET IDENTITY_INSERT Folio ON 
INSERT INTO Folio (ReservationID, GuestID, RoomID, QuotedRate, CheckinDate,Nights, Status, Comments, DiscountID) 
VALUES(@ReservationID, 500, 20, 35.50, '07/24/2016', 3, 'R', NULL, 1); 

Unten ist mein schneller Testcode,

create table Reservation(ReservationID smallint identity, CreditCardID int) 

insert into Reservation values(1),(2),(3),(4),(5) 

SET IDENTITY_INSERT Reservation ON 

DECLARE @ReservationID smallint; 

select @ReservationID = ReservationID FROM Reservation 

insert into Reservation (ReservationID, CreditCardID) 
values(@ReservationID,100) 
+0

In der Tat eingeführt Syntax-Fehler oben mit dem ')' nach 1. Wenn es Syntaxproblem wäre SSMS so sagen würde. Die SET-Syntax ist korrekt, die OP verwendet hat. Das ist kein Problem. Was du gezeigt hast, ist nur eine andere Syntax. – niksofteng

+0

Hi @Nikhil Vartak, Es gibt einen Sytax-Unterschied, um einer Variablen einen Wert zuzuweisen und einer Variablen einen Ausdruckswert zuzuweisen. Bitte beziehen Sie sich auf [link] (https://msdn.microsoft.com/en-us/library/ms187330.aspx). – mahesh

+0

Wahr und das weiß ich. Ich meinte 'select @ variable' vs.' set @variable = (select) 'ist hier kein Problem, weil OP in der Lage ist, einen richtigen @ Variablen-Wert zu erhalten. – niksofteng