2016-03-03 9 views
2

Есть ли задание для обновления одного и того же столбца 2 раза в одном и том же запросе UPDATE, как указано ниже?UPDATE один и тот же столбец несколько раз в запросе

UPDATE tbl SET a = 5, b = 'something', a = 6 WHERE c = 'whatever'; 

Есть ли стандартизированное поведение для этого, или это могло бы варьироваться от вкусов SQL (например, это «неопределенное поведение»)? Беглый тест с sqlite, по-видимому, указывает, что они выполняются слева направо, поэтому последнее значение столбца будет результатом, но это не означает, что это всегда будет так.

Редактировать: Причина, по которой я пытаюсь это сделать, это проверить SQL-инъекцию для проекта класса. Одно из полей в UPDATE несложно введено, и я пытаюсь использовать его для перезаписывания ранее полей SET из того же запроса.

+1

Зачем вам это делать? Возможно, образцы данных и желаемые результаты помогут нам понять вашу цель. В 'mysql' он будет обновляться с последним значением, которое вы укажете -' sql server' даже не разрешит его. Что вы пытаетесь достичь? – sgeddes

+0

@sgeddes Я обновил сообщение. – iobender

+0

Порядок, в котором заданы 'set', не указывается вообще. Данная база данных может указывать на лексическое упорядочение, но это не гарантируется. –

ответ

0

Это не совсем тот ответ, который вы ищете, но при условии, что текст «что-то» является полем, в котором вы проходите, и он не параметризирован или не экранирован, вы можете это сделать. Все это зависит от того, как строится запрос и с какой базой данных он выполняется.

UPDATE tbl SET a = 5, b = 'something'; UPDATE tbl set a = 6;--' WHERE c = 'whatever'; 

, введя следующую команду в пользовательском вводе

something'; UPDATE tbl set a = 6;-- 

Это предполагает, что запрос строится динамически что-то вроде этого

var query = "UPDATE tbl set a = 5, b = '" + userInput + "' WHERE c = 'whatever'"; 

Здесь уместный вопрос: How does the SQL injection from the "Bobby Tables" XKCD comic work?

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