Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Обработка вложенных запросов при IF и CASE  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Обработка вложенных запросов при IF и CASE  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
1. Байдизигн (см. документацию - где в ней сказано, что в case можно использовать инструкции обновления данных? вот сам case в инструкциях DML использовать можно).
2. При чем тут ещё безопасность в TSQL? Контекст подзапроса смотреть надо - если в контексте в подзапросе допустим возврат нескольких строк, то почему ему не работать?
15 май 13, 06:38    [14296642]     Ответить | Цитировать Сообщить модератору
 Re: Обработка вложенных запросов при IF и CASE  [new]
Glory
Member

Откуда:
Сообщений: 104760
Alex Bor
и не работает этот:
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 <TableName0> set <FieldName0>=1 
where <FieldName1>=1 and ( <FieldName>=108 or <FieldName2>=1)
15 май 13, 09:18    [14296856]     Ответить | Цитировать Сообщить модератору
 Re: Обработка вложенных запросов при IF и CASE  [new]
Alex Bor
Member

Откуда: из Тюмени
Сообщений: 8
Glory,

спасибо, то что нужно.
... и не надо городить огороды...
15 май 13, 09:42    [14296941]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить