Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите разобраться с временными таблицами  [new]
d1sh0nest
Member

Откуда:
Сообщений: 5
Добрый день!

Подскажите, пожалуйста, как правильно в хранимой процедуре соединить таблицы и удалить из них ( если возможно) лишние данные.
Есть таблица #DealCur_TABLE, где содержится информация по сделкам клиентов, дата открытия у которых с 2012-04-01 по 2012-04-26
Есть таблица #DealLastPer_TABLE, где хранится информация по сделкам с датой открытия до 2012-04-01.
Необходимо выявить сделки клиентов за период с 2012-04-01 по 2012-04-26, которые заключаются с клиентом повторно, т.е.
, в прошлом (до 2012-04-01) с данным клиентом сделки уже были заключены. Для этого я использую следующий запрос:

select* from #DealCur_TABLE DC INNER JOIN #DealLastPer_TABLE DL ON DC.idClient=DL.idClient

Тем самым выделяю сделки, которые с клиентом заключаются повторно (по крайней мере, я так думаю). Далее необходимо удалить повторные сделки из временной таблицы #DealCur_TABLE, для того чтобы в отчет вывести только актуальную информацию. Но как это правильно сделать не представляю.

Не судите строго, опыт работы с хранимками только неделя =).
26 апр 12, 12:00    [12473279]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с временными таблицами  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
delete DC
from
 #DealCur_TABLE DC
where
 exists(select * from #DealLastPer_TABLE where idClient = DC.idClient);
26 апр 12, 12:07    [12473339]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с временными таблицами  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
d1sh0nest,
работа с темповыми таблицами происходит так же как и с обычными
типа такого
delete t_c
from #DealCur_TABLE t_c
where exists(select 1 from #DealLastPer_TABLE dl where t_c.idClient=dl.idClient )
--or
delete t_c
from #DealCur_TABLE t_c
inner join #DealLastPer_TABLE dl on t_c.idClient=dl.idClient 


BOL delete
26 апр 12, 12:09    [12473354]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с временными таблицами  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
print @@VERSION -- Что выдаёт

create table #DealLastPer_TABLE (...)
create table #DealCur_TABLE (...)


ЗЫ: Это конечно твоё дело, но вообще общеизвестное сокращение для Table = tbl. Да и вообще c ## и # всегда начинается идентификатор таблицы и ничего другого.
26 апр 12, 12:13    [12473385]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с временными таблицами  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
ZOOKABAKODER
Да и вообще c ## и # всегда начинается идентификатор таблицы и ничего другого.
Да что Вы говорите?!
А как же временные процедуры?
26 апр 12, 12:15    [12473398]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с временными таблицами  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
ZOOKABAKODER
Да и вообще c ## и # всегда начинается идентификатор таблицы и ничего другого.

if object_id('tempdb..#p') is not null
    drop proc #p
go
create proc #p
as
    print 'Hi there!'    
go
exec #p    
26 апр 12, 12:18    [12473417]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с временными таблицами  [new]
d1sh0nest
Member

Откуда:
Сообщений: 5
to invm, denis2710 Спасибо, запрос с exist больше понравился.

to ZOOKABAKODER, у меня MSSQL 2008 R2

Продолжаем обсуждать временные таблицы. Тем самым процедура одним запросом отбирает повторные сделки и удаляет их из врем. таблицы #DealCur_TABLE DC

delete DC
from
#DealCur_TABLE DC
where
exists(select * from #DealLastPer_TABLE DL where DL.idClient = DC.idClient);

Далее мне необходимо посчитать количество оставшихся сделок, присвоить значение переменной, а уже переменную использовать в расчетах.
Для этого я объявил переменную в начале процедуры: declare @TotalAmtCurDate int

И выполняют запрос, указанный ниже, но он не работает, так как возможно синтаксис не верный. Но без Вашей помощи не получается найти ошибку.

select @TotalAmtCurDate = (select ISNULL(SUM(idDeal),0) from #DealCur_TABLE )
26 апр 12, 12:51    [12473652]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с временными таблицами  [new]
iljy
Member

Откуда:
Сообщений: 8711
d1sh0nest
И выполняют запрос, указанный ниже, но он не работает, так как возможно синтаксис не верный. Но без Вашей помощи не получается найти ошибку.

select @TotalAmtCurDate = (select ISNULL(SUM(idDeal),0) from #DealCur_TABLE )

Так и пишет - не работаю? Или все-таки еще какую-то фигню (чисто поржать) выдает?
А синтаксис, прямо скажем, избыточный, проще так:
select @TotalAmtCurDate = ISNULL(SUM(idDeal),0) from #DealCur_TABLE
26 апр 12, 13:09    [12473800]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с временными таблицами  [new]
d1sh0nest
Member

Откуда:
Сообщений: 5
Пишет, что Must declare the scalar variable "@TotalAmtCurDate".
я же вроде объявил declare @TotalAmtCurDate int
26 апр 12, 13:19    [12473889]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с временными таблицами  [new]
iljy
Member

Откуда:
Сообщений: 8711
d1sh0nest
Пишет, что Must declare the scalar variable "@TotalAmtCurDate".
я же вроде объявил declare @TotalAmtCurDate int

А целиком код можете привести?
26 апр 12, 13:24    [12473925]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с временными таблицами  [new]
d1sh0nest
Member

Откуда:
Сообщений: 5
Спасибо, с вопросом я разобрался. Идем дальше. Теперь интересует то, как результаты работы хранимой процедуры отобразить в интерфейсе пользователя.

- В хранимой процедуре я объявляю переменную типа TABLE

declare @TbAmtLastDate TABLE(
Amount_Override int NOT NULL,
sStatus_Name nvarchar(150) NOT NULL)

- Выполняю запрос и вставляю в переменную @TbAmtLastDate таблицу с данными.

INSERT @TbAmtLastDate (Amount_Override,sStatus_Name)

SELECT COUNT(DS.idDeal) AS Amount_Override, DS.sStatus_Name FROM TABLE_1 DS

В переменной @TbAmtLastDate следующие данные:

Amount_Override sStatus_Name
1 Активная
121 Действует

Далее суммирую столбец Amount_Override, а результат присваиваю переменной.

select @TotalAmtLastDate =(select SUM(Amount_Override) from @TbAmtLastDate)

Переменную подставляю в формулу

IF (@TotalAmtLastDate/100*10)>=@TotalAmtCurDate and @TotalAmtCurDate <=15
SET @ResultAmt=1
ELSE
SET @ResultAmt=-1

Что нужно указать в хранимой процедуре, чтобы данные переменной @TbAmtLastDate, @ResultAmt и т.д. отдавались в другую систему для того результаты работы хранимки отображались в отчете?

Может как-то специальным образом нужно обозначить переменную или использовать какой-то оператор?

Спасибо.
26 апр 12, 15:11    [12474718]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с временными таблицами  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
[quot Гавриленко Сергей Алексеевич]
ZOOKABAKODER
Да и вообще c ## и # всегда начинается идентификатор таблицы и ничего другого.

Прости, ОТЕЦ, не знал! Век живи как грицца. Спс...
26 апр 12, 15:19    [12474765]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с временными таблицами  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
d1sh0nest, код в теги обрамляй пожалуйста, ато не понятно где у тебя скрипт, где сообщение, где кончается один скрипт а где начинается другой.
После окончания выполнения запроса, т.е. после того как ты {f5} нажал и внизу появилась надпись "script execution complete" или "script error" всё что на @ начинается, исчезает, и надо снова объявлять. Может в этом дело?
26 апр 12, 15:26    [12474819]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с временными таблицами  [new]
Glory
Member

Откуда:
Сообщений: 104751
d1sh0nest
Может как-то специальным образом нужно обозначить переменную или использовать какой-то оператор?

А вот всю кучу действий по "суммированию" в переменную не проще одним запросом сделать ?
Зачем нужно "перекладывание" значений из одних структур в другие ?
26 апр 12, 15:29    [12474849]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с временными таблицами  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35369
Блог
iap
Да что Вы говорите?!
А как же временные процедуры?


Ни разу не встречал такого их использования.
Это как с версиями хп, вроде как есть возможность, но практически не используется.
26 апр 12, 15:53    [12475035]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с временными таблицами  [new]
AZv
Member

Откуда:
Сообщений: 69
Критик
iap
Да что Вы говорите?!
А как же временные процедуры?


Ни разу не встречал такого их использования.
Это как с версиями хп, вроде как есть возможность, но практически не используется.


"не встречал" <> "практически не используется"
26 апр 12, 19:01    [12476246]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить