- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
CREATE PROCEDURE Out_Message_ECntl
--<@param1, sysname, @p1> <datatype_for_param1, , int> = <default_value_for_param1, , 0>,
--<@param2, sysname, @p2> <datatype_for_param2, , int> = <default_value_for_param2, , 0>
AS BEGIN
--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
/* Для Добавления записей в таблицу PPLS2BILLS_SRCO_MESAGE
сначала создадим временную таблицу с номерами документа
и ко-вом рейсов по этой дате */
--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-- Создаем временную таблицу с результатом группировки неотправленных рейсов
SELECT Flag_Data , COUNT(Flag_Data) AS Kol_Reis
INTO Vrem_Tabl_Mesage_Vrem
FROM PPLS2BILLS_SRCO
WHERE Flag_Out_EC = 0 --Не отправленные
GROUP BY Flag_Data
-- Таблица - Стек данные в ней сохраняются до полной обр Рейсов по месяцу
INSERT INTO Steck_Table_Mesage SELECT
Flag_Data = a.Flag_Data,
Kol_Reis = a.Kol_Reis
FROM Vrem_Tabl_Mesage_Vrem a
-- Удаляю Vrem_Tabl_Mesage_Vrem
DROP Table Vrem_Tabl_Mesage_Vrem
-- Добавляю записи в таблицу PPLS2BILLS_SRCO_MESAGE
INSERT INTO PPLS2BILLS_SRCO_MESAGE SELECT
DOCUMENT = Flag_Data,
Nom_Document = dbo.Mesage_Namber(Flag_Data),
Kol_Reis_In_Docum = Kol_Reis,
Cancel_Kol_Reis_Doc = ( SELECT COUNT(*)
FROM PPLS2BILLS_SRCO_DEL a INNER JOIN PPLS2BILLS_SRCO b
ON a.PPLS_ID = b.PPLS_ID
WHERE a.Flag_Out_EC = 0 and b.Flag_Out_EC = 0 ),
Greate_Date_Docum = GetDate(),
Flag_Out_EC = 0
FROM Steck_Table_Mesage WHERE Flag_Data IS NOT NULL
-- Корректирую записи №_Сообщения в PPLS2BILLS_SRCO
UPDATE a SET Flag_Mesage =
(SELECT MAX(Nom_Document) FROM PPLS2BILLS_SRCO_MESAGE a
INNER JOIN PPLS2BILLS_SRCO b
ON a.DOCUMENT = b.Flag_Data )
FROM PPLS2BILLS_SRCO a INNER JOIN PPLS2BILLS_SRCO_MESAGE b
ON a.Flag_Data = b.DOCUMENT
WHERE a.Flag_Out_EC = 0
-- ==================================================================================
-- Курсор выбирает строки из PPLS2BILLS_SRCO_MESAGE, заполняет Vrem_Tabl_NumReis
-- ==================================================================================
-- Создадим временную таблицу
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Vrem_Tabl_NumReis]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Vrem_Tabl_NumReis]
CREATE TABLE [dbo].[Vrem_Tabl_NumReis] (
[ID_PPLS] [int] NULL ,
[Doc] [char] (8) COLLATE Ukrainian_CI_AI_KS_WS NULL ,
[Num] [int] NULL ,
[Reis] [int] IDENTITY (1, 1) NOT NULL
) ON [PRIMARY]
-- Обьявляю курсор
DECLARE Cursor_Num_Reis CURSOR
FOR SELECT DOCUMENT, Nom_Document
FROM PPLS2BILLS_SRCO_MESAGE
-- Обьявляю переменные для приема полей таблицы
DECLARE @count int, @DOCUMENT char(8),
@Nom_Document int
SELECT @count = 1
-- Открываю курсор
OPEN Cursor_Num_Reis
FETCH NEXT FROM Cursor_Num_Reis INTO @DOCUMENT, @Nom_Document -- считываю первую запись
WHILE (@@fetch_status <> -1) -- цикл по записям курсора
BEGIN
-- вставляю в Vrem_Tabl_NumReis (счетчик по выбранным записям)рейсы из PPLS2BILLS_SRCO_MESAGE
insert into Vrem_Tabl_NumReis
select *
from dbo.Fun_Num_Reis_in_Mesage(@DOCUMENT,@Nom_Document)
--корректируем номер рейса в сообщении
UPDATE a
SET Flag_NumReis_Mes = b.Reis
FROM PPLS2BILLS_SRCO a INNER JOIN Vrem_Tabl_NumReis b
ON a.PPLS_ID = b.ID_PPLS
WHERE a.Flag_Out_EC = 0
-- Подготавливаю таблицу для нового документа
truncate table dbo.Vrem_Tabl_NumReis -- при truncate счетчик сбрасывается в 0
FETCH NEXT FROM Cursor_Num_Reis INTO @DOCUMENT, @Nom_Document -- переход на следующую запись
SELECT @count = @count + 1 -- количество записей
END
CLOSE Cursor_Num_Reis -- закрываю курсор
DEALLOCATE Cursor_Num_Reis -- освобождаю курсор
--DROP TABLE Vrem_Tabl_NumReis -- удаляю временно созданную таблицу
END -- Procedure
GO
-- ВНИМАНИЕ! - ДОДЕЛАТЬ ПРИ ОТПРАВКЕ ПО ПОЧТЕ УСТ ФЛАГОВ В ТАБЛИЦАХ "ОТПРАВЛЕНО"
-- И ЗАПОЛНЕНИЕ ТАБЛИЦЫ dbo.PPLS2BILLS_CRCO_Mail_Out
--truncate table PPLS2BILLS_SRCO_MESAGE
--delete dbo.PPLS2BILLS_SRCO
--delete dbo.PPLS2BILLS_SRCO_DEL
--exec dbo.Insert_PPLS2BILLS_SRCO
--EXEC Insert_PPLS2BILLS_SRCO '17 july, 2002'
-- exec Out_Message_ECntl
Elvenfighter 12.12.2013 00:43 # +6
Хорошо, хоть прокомментировал, а то я бы ломал голову над этими строками
LispGovno 12.12.2013 01:41 # 0
А вот Бахамут - это дракон.
istem 12.12.2013 23:42 # +4
mac-t 12.12.2013 06:59 # +1
3Doomer 12.12.2013 08:01 # +1
santa_microbe 12.12.2013 11:48 # +2
DBdev 12.12.2013 19:15 # +3
1. Ужаснейший нейминг, везде - таблицы, переменные, функции... всё ужасное;
2. Строки 2-3, автор понятия не имеет для чего SQL Server Management Studio вставляет эти строки;
3. Временные таблицы такие временные;
4. Использование табличных функций только запутывает ещё больше код;
5. Строки 18-19, Йода стайл? И вообще, смысла левая часть равенства не имеет;
6. Строки 11-22 заменяются одной командой и без "временной" таблицы;
7. Курсор... да... он злобный.
И вообще, всю бизнес-логику на ОРМ.
Ощущение, что у автора есть знания T-SQL, но пользоваться ими он не умеет.
bormand 12.12.2013 19:24 # +2
Магия же! Раз среда их для чего-то вставила, значит надо оставить ;) Вон в жабе некоторые инвалиды индивиды тоже оставляют вставленные эклипсом строчки в духе