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

Откуда: Dushanbe TJK
Сообщений: 2688
Уважаемые Админы.
Есть База Данных, с таблицами ключами индексами и т.д., данных в ней за 2 года набралось.
Раз в месяц (в конце месяца) делаются необходимые расчеты, чтото типа закрытия месяца, расчет данных и переброска расчитанных данных в другие таблици этой же базы. Это закрытие месяца сейчас реализовано на Дельфи, т.е. есть прога которая подключается к базе и делает необходимые расчеты. Сами понимаете это долго работает. Есть большое желание реализовать закрытие месяца на TSQL, так вот скажите есть ли какие либо грабли на этом пути. Что лучше использовать?
СПАСИБО ВСЕМ ОТКЛИКНУВШИМСЯ.
22 июн 04, 08:11    [755917]     Ответить | Цитировать Сообщить модератору
 Re: Помогите не наступить на грабли.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
Что лучше использовать?


Написать хранимую процедуру, которая бы реализовывала логику закрытия месяца на T-SQL.
22 июн 04, 08:13    [755919]     Ответить | Цитировать Сообщить модератору
 Re: Помогите не наступить на грабли.  [new]
Timon
Member

Откуда: Dushanbe TJK
Сообщений: 2688
pkarklin
автор
Что лучше использовать?


Написать хранимую процедуру, которая бы реализовывала логику закрытия месяца на T-SQL.


pkarklin Привет.
Да я в принципе так и думал, а стоит ли в процедуре пользоваться Курсорами? И какие ограничения на курсоры?
22 июн 04, 08:16    [755922]     Ответить | Цитировать Сообщить модератору
 Re: Помогите не наступить на грабли.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Если есть возможность избежать навигационного подхода (курсоров), то лучше без них.

автор
И какие ограничения на курсоры?


Что вы имели ввиду?
22 июн 04, 08:18    [755924]     Ответить | Цитировать Сообщить модератору
 Re: Помогите не наступить на грабли.  [new]
Timon
Member

Откуда: Dushanbe TJK
Сообщений: 2688
В книгах написано что курсоры лучше не заключать в длинные транзакции (транзакции которые содержат в себе много Update-ов и Insert-ов). Вот например ограничение, я правда не проверял, но хотел бы узнать у знающих людей.

Навигационный подход - это последовательный перебор записей одной таблици? Так ли это?

Ещё я хотел спросить, как Вы думаете скорость обработки увеличиться если реализовать на TSQL?
22 июн 04, 08:26    [755933]     Ответить | Цитировать Сообщить модератору
 Re: Помогите не наступить на грабли.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
В книгах написано что курсоры лучше не заключать в длинные транзакции (транзакции которые содержат в себе много Update-ов и Insert-ов). Вот например ограничение, я правда не проверял, но хотел бы узнать у знающих людей.

Дело в том, что операции, выполняемые с помошью курсоров, в общей своей массе выполняются гараздо дольше, чем обычным запросом. Отсюда и идет увеличение времени транзакции, что ни есть гуд.
автор
Навигационный подход - это последовательный перебор записей одной таблици? Так ли это?

Да. Те самые курсоры. Тока не обязательно одной таблицы. Его противоположность - SET - ориентированные подход, т.е. работа не с отдельно взятой записью, а с наборами.
автор
Ещё я хотел спросить, как Вы думаете скорость обработки увеличиться если реализовать на TSQL?

Если все грамотно написать, то значительно. Ибо вы приближаете обработку к данным. Да и сервер у вас, наверняка, мощнее, чем рабочая станция. Кроме того, при изменении алгоритма закрытия периода вам не придется каждый раз пересобирать клиента и обновлять его у пользователей.
22 июн 04, 08:33    [755939]     Ответить | Цитировать Сообщить модератору
 Re: Помогите не наступить на грабли.  [new]
Timon
Member

Откуда: Dushanbe TJK
Сообщений: 2688
автор
Если все грамотно написать, то значительно. Ибо вы приближаете обработку к данным. Да и сервер у вас, наверняка, мощнее, чем рабочая станция. Кроме того, при изменении алгоритма закрытия периода вам не придется каждый раз пересобирать клиента и обновлять его у пользователей.


ВОТ-ВОТ, бегать по клиентам трудно стало поэтому решил сделать на TSQL.

Значит по возможности избегать КУРСОРОВ? ХОРОШО.

Ещё вопрос: ТРАНЗАКЦИИ.
Как Вы думаете мне весь процесс закрытия вставить в:
Begin Tran
--
--Процесс расчета (процедуры и функции)
--
End Tran


И ещё в процессе расчета необходимы временные таблици, как они отрабатывают?
22 июн 04, 08:42    [755952]     Ответить | Цитировать Сообщить модератору
 Re: Помогите не наступить на грабли.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
Ещё вопрос: ТРАНЗАКЦИИ.


А это все будет зависить от вашей бизнес-логики. Если это должна быть одна неделимая операция, то да в одной транзакции. Если несколько независимых блоков, то несколько транзакций.

автор
И ещё в процессе расчета необходимы временные таблици, как они отрабатывают?


Нормально отработают. :))) Тока с точки зрения оптимизации быстродействия старайтесь где это возможно использовать табличные переменные, что позволит избежать перекомпиляции хп.
22 июн 04, 08:47    [755957]     Ответить | Цитировать Сообщить модератору
 Re: Помогите не наступить на грабли.  [new]
Timon
Member

Откуда: Dushanbe TJK
Сообщений: 2688
автор
Нормально отработают. :))) Тока с точки зрения оптимизации быстродействия старайтесь где это возможно использовать табличные переменные, что позволит избежать перекомпиляции хп.


Что такое табличные переменные?
Я собирался все глобальные переменные хранить во временных таблицах.
22 июн 04, 10:04    [756136]     Ответить | Цитировать Сообщить модератору
 Re: Помогите не наступить на грабли.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37100
автор
Что такое табличные переменные?

Типа временных таблиц, немного ограниченны по функциональности но обладающие свойствами переменных.
См Bol>table variables
22 июн 04, 10:08    [756151]     Ответить | Цитировать Сообщить модератору
 Re: Помогите не наступить на грабли.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
Что такое табличные переменные?


Версия сервера 2000? См. BOL на предмет table variables

автор
Я собирался все глобальные переменные хранить во временных таблицах.


Ну, глобальные переменные можно и в постоянных таблицах хранить. А вот табличные переменные можно использовать для хранения промежуточных результатов при закрытии периода.
22 июн 04, 10:11    [756157]     Ответить | Цитировать Сообщить модератору
 Re: Помогите не наступить на грабли.  [new]
Timon
Member

Откуда: Dushanbe TJK
Сообщений: 2688
Извините но в Books on line я ничего не нашел по table variables
Может подскажите другие слова для поиска или пример.
22 июн 04, 10:25    [756213]     Ответить | Цитировать Сообщить модератору
 Re: Помогите не наступить на грабли.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
SELECT @@version что дает?
22 июн 04, 10:26    [756220]     Ответить | Цитировать Сообщить модератору
 Re: Помогите не наступить на грабли.  [new]
Timon
Member

Откуда: Dushanbe TJK
Сообщений: 2688
pkarklin
SELECT @@version что дает?


Даёт
Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 4)

А для чего? если можно с расшифровкой.
22 июн 04, 10:29    [756231]     Ответить | Цитировать Сообщить модератору
 Re: Помогите не наступить на грабли.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
А для чего? если можно с расшифровкой.


Табличные переменные появились тока в 2000 сервере. Но как вы не нашли статью в BOL с помошью указателя не пойму. Вот адрес этой страницы:

mk:@MSITStore:C:\Program%20Files\Microsoft%20SQL%20Server\80\Tools\Books\tsqlref.chm::/ts_ta-tz_7ysl.htm
22 июн 04, 10:33    [756243]     Ответить | Цитировать Сообщить модератору
 Re: Помогите не наступить на грабли.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37100
Timon
Извините но в Books on line я ничего не нашел по table variables
Может подскажите другие слова для поиска или пример.

Встать на вкладочку Index и вбить table variables.
22 июн 04, 10:35    [756252]     Ответить | Цитировать Сообщить модератору
 Re: Помогите не наступить на грабли.  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_ta-tz_7ysl.asp
22 июн 04, 10:38    [756265]     Ответить | Цитировать Сообщить модератору
 Re: Помогите не наступить на грабли.  [new]
Timon
Member

Откуда: Dushanbe TJK
Сообщений: 2688
Всё страницу нашел, а что и как, пока не разобрался.
Думаю что я получил ответы на свои вопросы, и теперь смело возмусь за переделку, но наверно всё равно в процессе переделки будут вопросы, надеюсь Вы мне поможете :)))))).
Приблизительно я определился как и что я буду делать.

Всем СПАСИБО.
22 июн 04, 10:44    [756287]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить