Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Alex Bor Member Откуда: из Тюмени Сообщений: 8 |
Добрый день, 1. Не подскажете, почему работает этот код: SELECT (select case when <FieldName>=108 then (select top 1 ObjectID from <TableName1>) else (select top 1 ObjectID from <TableName2>) end ) as ID1 FROM <TableName0> и не работает этот: SELECT (select case when <FieldName>=108 then (UPDATE <TableName0> set <FieldName0>=1 where <FieldName1>=1) else (UPDATE <TableName0> set <FieldName0>=1 where <FieldName1>=1 and <FieldName2>=1) end ) as ID1 FROM <TableName0> Также, если вместо UPDATE'ов вставлять EXEC и, собственно, вызов ХП. Во втором случае ругается на неправильный синтаксис рядом с UPDATE и на скобки. 2. Как можно организовать обработку вложенных запросов при определенном условии. Я так понял из-за безопасности в TSQL нельзя выполнить вложенный запрос, если в условии SELECT вернул более одного результата. |
15 май 13, 06:30 [14296633] Ответить | Цитировать Сообщить модератору |
tpg Member Откуда: Novosibirsk Сообщений: 23902 |
1. Байдизигн (см. документацию - где в ней сказано, что в case можно использовать инструкции обновления данных? вот сам case в инструкциях DML использовать можно). 2. При чем тут ещё безопасность в TSQL? Контекст подзапроса смотреть надо - если в контексте в подзапросе допустим возврат нескольких строк, то почему ему не работать? |
15 май 13, 06:38 [14296642] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
UPDATE <TableName0> set <FieldName0>=1 where <FieldName1>=1 and ( <FieldName>=108 or <FieldName2>=1) |
||
15 май 13, 09:18 [14296856] Ответить | Цитировать Сообщить модератору |
Alex Bor Member Откуда: из Тюмени Сообщений: 8 |
Glory, спасибо, то что нужно. ... и не надо городить огороды... |
15 май 13, 09:42 [14296941] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |