2016-07-16 3 views
0

Все, что я пытаюсь сделать, это объявить переменную с именем @ReservationID, инициализировать ее значением из таблицы резервирования, где существуют определенные условия, и использовать это значение в качестве параметра для вставки нового файла Folio запись в таблице. Когда я иду печатать мою таблицу Folio, новая запись таблицы не существует. Я проверил и запустил оператор SELECT, и он соответствует правильному значению на основе условий. Я не инициализирую или не передаю переменную правильно? Что мне здесь не хватает? Любая помощь будет оценена по достоинству.SQL Variable as INSERT INTO Значение

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

На вкладке сообщений результатов, что не затронутых строк получить у? – niksofteng

+0

Код выглядит правильно. Только требование для @ReservationID заключается в том, что подзапрос должен возвращать только одно значение (для этого вы можете использовать top (1)). Является ли 'ReservationID 'столбцом IDENTITY? –

ответ

0

Возможно, вы не можете инициализировать или передавать переменную правильно.

Обратитесь к MSDN Here за присвоение переменной значению выражения.

Вам нужно исправить SET & IDENTITY_INSERT, как показано ниже,

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); 

Ниже мой быстрый код проверочной

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

На самом деле вы ввели синтаксическую ошибку выше с этим ')' после 1. Если бы это была проблема синтаксиса, SSMS заявила бы так. Синтаксис 'SET' правильный, что OP использовал. Это не проблема. То, что вы показали, - это еще один синтаксис. – niksofteng

+0

Hi @Nikhil Vartak, существует разность sytax для назначения значения переменной и назначения значения выражения переменной. См. [Link] (https://msdn.microsoft.com/en-us/library/ms187330.aspx). – mahesh

+0

Верно, и я это знаю. Я имел в виду использование 'select @ variable' vs' set @variable = (select) 'не является причиной проблемы здесь, потому что OP может получить правильное значение' @ variable'. – niksofteng