2014-10-24 3 views
0

Каким будет правильный способ написать этот запрос?Настройка значений в таблице из другой таблицы

String squery= "update Room set GuestCode="+gc+", FirstName=(select FirstName from GuestDetails where GuestCode="+gc+"), LastName=(select LastName from GuestDetails where GuestCode="+gc+"), Country=(select Country from GuestDetails where GuestCode="+gc+"), State=(select State from GuestDetails where GuestCode="+gc+"), City=(select City from GuestDetails where GuestCode="+gc+"), ContactNo=(select ContactNo from GuestDetails where GuestCode="+gc+") where RoomNo="+rn+"";  

я пытаюсь установить некоторые значения в таблице (номер) из другой таблицы (GuestDetails) с guestcode в качестве входных данных. Я получаю исключение как недопустимый объект memo, ole или hyperlink в подзапросе. Пожалуйста помоги.

+0

Что это такое '()' в вашем запросе между присвоениями для 'City' и' ContactNo'? – khelwood

+0

Извините, это должно было быть ',' там. Возможно, это было добавлено при вставке. – pallavi

+0

Вы используете Hibernate или только jdbc? + Во-первых, всегда используйте привязки! – Multisync

ответ

1

Это может быть лучший способ для написания вашего обновления. Это работает в sql-сервере

UPDATE A 
SET GuestCode = 'gc', 
     FirstName = B.FirstName, 
     LastName = B.LastName, 
     Country = Country, 
     State = B.State, 
     City = B.City, 
     ContactNo = B.contactNO 
FROM ROOM A 
     JOIN GuestDetails B 
     ON b.GuestCode = 'gc' 
WHERE RoomNo = 'rn'; 
-1

Его лучше использовать хранимую процедуру, чтобы избежать инъекции sql. Ваш код менее уязвим для инъекций.

Также используйте соединение, чтобы избежать подвыборок из-за проблем с производительностью.

+1

* Его лучше использовать хранимую процедуру, чтобы избежать SQL-инъекции *: Это не совсем так. Простейшим решением является использование экземпляра 'PreparedStatement'. –

+0

Да, действительно, это правда. Используйте параметры вместо жесткого кодирования кода. – Jackson

Смежные вопросы