Может я торможу, но решения так и не нашел. Использую MsSQL2000.
Вот моя структура таблицы
------------------------------
|usernane | clicked |
------------------------------
username - уникальный
clicked - нет, в нем могут быть значения NULL, туда заносятся данные типа 3e1eb81d2c9440edrf382f55d298edb7 поле типа varchar 32
После операций наших финансовых воротил, они должны тыцнуть кнопочку и скрипт должен испольнить запрос типа, который приведен ниже, столько раз сколько они введут в форме.
Сам запрос:
SET ROWCOUNT 2
UPDATE dbo.USERS
SET Clicked = NULL
FROM users
WHERE (clicked = \'3e1eb81d2c9440edrf382f55d298edb7\')
Т.е. поменять clicked на NULL какому пользователю не важно важно скольким пользователям (т.е. сколько раз).
Конечно я могу выбрать все строки где поле clicked не равно NULL и попорядку сделать update, но, думаю, что есть более эффективное решение на стороне сервера.
Варианты, которые я попробовал:
1.
SET ROWCOUNT 2
UPDATE dbo.USERS
SET Clicked = NULL
FROM users
WHERE (clicked is not null)
2.
UPDATE dbo.USERS
SET Clicked = NULL
FROM (SELECT TOP 2 username, Clicked
FROM dbo.USERS
WHERE clicked IS NOT NULL) AS t1
WHERE (users.username = t1.username)
В обоих вариантах, если подставлять реальные значения и писать
clicked = \'реальное значение\' оба запроса выполняются, если в запись с другиму значением username внести такое же значение clicked, то запросы не выполняются.
UPDATE (Searched)
The UPDATE (Searched) statement changes data in existing rows of a table. UPDATE (Searched) is a standard Transact-SQL statement.
В мануале по MsSQL пишут такое:
Syntax
UPDATE {table_name | view_name} SET [table_name. | view_name.] {column_name={expression | NULL | (select_statement)}[,...]} [FROM {table_name | view_name}[,...]] [WHERE search_condition]
...
...
search_condition
Is any expression that can legally follow the standard Transact-SQL WHERE clause.
Последняя строка говорит о том что выражение после where любым выражением, какое допускается в стандартной Transact SQL WHERE-связке. Я так понимаю, что если select * from users where clicked is not null результаты выдает, то выражение is not null может
legally follow the standard Transact-SQL WHERE clause.
Укажите на ошибку пожалуйста...