Имя: Пароль:
1C
 
MS SQL: выбор во временную таблицу по условию
0 extrim-style
 
02.10.15
15:19
Подскажите как выбрать во временную таблицу по условию?
Если делаю так:

if object_id('tempdb..#idmails') is not null drop table #idmails

if @idmail = 0
    begin
        select 5 as test
        into #idmails
    end
else
    begin
        select 6 as test
        into #idmails
    end

то получаю ошибку "There is already an object named '#idmails' in the database."
1 МихаилМ
 
02.10.15
15:21
ошиблись  форумом.
Вам на sql.ru
2 rs_trade
 
02.10.15
15:21
(0) не уверен что tempdb писать надо. скуль сам знает где у него временные таблицы лежат.
3 rs_trade
 
02.10.15
15:22
(1) норм. все интересней чем вопросы про не обнаруженное поле агрегатного объекта.
4 1Сергей
 
02.10.15
15:22
воспользуйся кейсом
5 extrim-style
 
02.10.15
15:22
(1) прочел как "не знаю, но стыдно признаться"
6 Господин ПЖ
 
02.10.15
15:23
а чо его искать?

drop table #idmails

и все
7 extrim-style
 
02.10.15
15:24
(5) это есть в (0)
8 extrim-style
 
02.10.15
15:24
(4) пробовал, не получилось. Сейчас приведу пример.
9 МихаилМ
 
02.10.15
15:25
(0)
зачем указвать  # ()
в ..#idmails в контекте tempdb ?
10 1Сергей
 
02.10.15
15:27
(8)
if object_id('tempdb..#idmails') is not null drop table #idmails

select
    CASE
        WHEN @idmail = 0 THEN 5
        ELSE 6
    END as test
into #idmails
11 extrim-style
 
02.10.15
15:28
(9) вроде бы это более-менее стандартная команда уничтожения временных таблиц?
12 1Сергей
 
02.10.15
15:28
SQL - это не язык программирования
13 N1kMZ
 
02.10.15
15:30
(11)
if object_id('tempdb..#idmails') is not null drop table #idmails
DECLARE @idmail int
SET @idmail = 0
select
    CASE
        WHEN @idmail = 0 THEN 5
        ELSE 6
    END as test
into #idmails

Всё работает
14 N1kMZ
 
02.10.15
15:36
(6) Потому что будет: Cannot drop the table '#idmails', because it does not exist or you do not have permission.
15 extrim-style
 
02.10.15
15:44
(10) в (0) - упрощенная задача
на самом деле мне нужно так:

if object_id('tempdb..#idmails') is not null drop table #idmails

declare @idmail int
set @idmail=5

select 5 as idmail
into #idmails
union all
select 7 as idmail

select * from #idmails
where case
     when @idmail=0 then idmail > 6
     when @idmail<>0 then idmail = @idmail
    end

Как это правильно обставить?
16 extrim-style
 
02.10.15
15:48
+(15) в этом случае ругается на Incorrect syntax near '>'.
Но, видимо, так и нельзя строить код, т.к. после "then" подразумевается конкретное выражение, а не условие.
17 1Сергей
 
02.10.15
15:48
(15) ты заполняешь временную таблицу из которой тут же берёшь данные?
18 extrim-style
 
02.10.15
15:49
(17) нет, я хочу заполнить временную таблицу в зависимости от условия
19 Гёдза
 
02.10.15
15:49
а разве селект инто сам делает криэйт?
20 1Сергей
 
02.10.15
15:50
(15)
вот эту порнографию

where case
     when @idmail=0 then idmail > 6
     when @idmail<>0 then idmail = @idmail
    end

замени на
where (@idmail=0 AND idmail > 6) OR (@idmail<>0 AND idmail = @idmail)
21 rs_trade
 
02.10.15
15:50
(19) конэчно
22 extrim-style
 
02.10.15
15:56
(20) Спасибо!
23 extrim-style
 
02.10.15
15:57
+(22) ...претендую на пятничность)