Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5   вперед  Ctrl      все
 Re: Генераторы в MSSQL  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5503
Блог
Знаете, что забавляет в адептах технологии?

Пока в продукте нет какой-то возможности - они говорят, что это вообще не нужно и можно прекрасно обойтись.
Как только возможность появляется - они начинают пинать новичков, что те не читают справочники и не пользуются такой гарной штукой.

Кому интересно - может пинать бухов, что дырки - это блаж, могут генерировать значения вызовом процедур в курсоре и блокировать "в самом конце" транзакции по импорту сотен документов. И думать "как круто они вывернулись", тратя огромное количество глюкозы на то, чтобы избежать deadlock.

Мне почему-то кажтся изящнее решение, когда в прикладном коде генератор - это просто одна функция. Которую можно использовать где угодно, как угодно и в какой угодно момент.
8 окт 09, 10:43    [7757166]     Ответить | Цитировать Сообщить модератору
 Re: Генераторы в MSSQL  [new]
aleks2
Guest
DeColo®es
Знаете, что забавляет в адептах технологии?

Пока в продукте нет какой-то возможности - они говорят, что это вообще не нужно и можно прекрасно обойтись.
Как только возможность появляется - они начинают пинать новичков, что те не читают справочники и не пользуются такой гарной штукой.

Кому интересно - может пинать бухов, что дырки - это блаж, могут генерировать значения вызовом процедур в курсоре и блокировать "в самом конце" транзакции по импорту сотен документов. И думать "как круто они вывернулись", тратя огромное количество глюкозы на то, чтобы избежать deadlock.

Мне почему-то кажтся изящнее решение, когда в прикладном коде генератор - это просто одна функция. Которую можно использовать где угодно, как угодно и в какой угодно момент.


Дарагуля, встроенные возможности отличаются от дополнительно написанных тем, что присутствуют "по-умолчанию". Канешно, "пусть будет - могет быть пригодится", но это далеко не то же самое, что "без этого никуды".

Вот и проблема "бухов и дырок" - ну не решается НИКАКИМИ генераторами. Ибо бух могет передумать на ЛЮБОМ этапе, в том числе и после генерации... месяц спустя.
8 окт 09, 11:45    [7757653]     Ответить | Цитировать Сообщить модератору
 Re: Генераторы в MSSQL  [new]
demian111
Member

Откуда:
Сообщений: 6241
Прочитал ту кто че пишет, ну тож решил обозначить свой ответ, я большой любитель секвенсов:)

К вопросу для тех а зачем это надо:)
У меня к примеру таблоид на составном ключе типо: (id int,dt datetime)
Identity мне к этому делу ну никак не прикрутить!

раньше делал Extended procedure, в ней тупо открывал файлик(хранилище) с последними айдишниками, делал +1, сохранял в файл. и возвращал как результат.
Что было удобно, то что Экстендед процедуру можно было в функции использовать.
Неудобство то что при бэкапе нужно было заботится и о хранилище секвенсов:)

был вариант сделать что то типо, как предложил Пятница_13_1, но слишком много таблоидов, об одном поле, пришлось бы делать, ну потребность в секвенсах у меня очень большая:)

Вариант через CLR сделать, ничего не выигрываю.

Вот такой вариант показался более предпочтительней:
create procedure dbo.sequences_new_id(@name nvarchar(128), @id varchar(128) out)
as
begin
  set nocount on
  update dbo.sequences set id=@id,@id=t1.id+1 from dbo.sequences(rowlock) t1 where t1.name=@name
  return 0
end
Потестил в многопоточном режиме, все нормально вроде бы:)
Вот так.
8 окт 09, 12:08    [7757820]     Ответить | Цитировать Сообщить модератору
 Re: Генераторы в MSSQL  [new]
Glory
Member

Откуда:
Сообщений: 104751
demian111

У меня к примеру таблоид на составном ключе типо: (id int,dt datetime)
Identity мне к этому делу ну никак не прикрутить!

А Identity разве мешает/запрещает составным ключам ?
8 окт 09, 12:11    [7757840]     Ответить | Цитировать Сообщить модератору
 Re: Генераторы в MSSQL  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5503
Блог
aleks2
Вот и проблема "бухов и дырок" - ну не решается НИКАКИМИ генераторами. Ибо бух могет передумать на ЛЮБОМ этапе, в том числе и после генерации... месяц спустя.
Вы решение смотрели? Как только "передумал" - регистрируется дырка и используется снова, как только понадобится.
8 окт 09, 12:14    [7757861]     Ответить | Цитировать Сообщить модератору
 Re: Генераторы в MSSQL  [new]
demian111
Member

Откуда:
Сообщений: 6241
Glory
demian111

У меня к примеру таблоид на составном ключе типо: (id int,dt datetime)
Identity мне к этому делу ну никак не прикрутить!

А Identity разве мешает/запрещает составным ключам ?


Нет не мешает, но логики мешает!,
Объект(id) изменяется во времени(dt)
8 окт 09, 12:15    [7757872]     Ответить | Цитировать Сообщить модератору
 Re: Генераторы в MSSQL  [new]
demian111
Member

Откуда:
Сообщений: 6241
и вариант добавления еще одного таблоида не предлагать:)
8 окт 09, 12:19    [7757897]     Ответить | Цитировать Сообщить модератору
 Re: Генераторы в MSSQL  [new]
Glory
Member

Откуда:
Сообщений: 104751
demian111
Glory
demian111

У меня к примеру таблоид на составном ключе типо: (id int,dt datetime)
Identity мне к этому делу ну никак не прикрутить!

А Identity разве мешает/запрещает составным ключам ?


Нет не мешает, но логики мешает!,
Объект(id) изменяется во времени(dt)

И причем тут Identity ? Вы значения ПК что ли меняете ?
8 окт 09, 12:23    [7757928]     Ответить | Цитировать Сообщить модератору
 Re: Генераторы в MSSQL  [new]
aleks2
Guest
DeColo®es
aleks2
Вот и проблема "бухов и дырок" - ну не решается НИКАКИМИ генераторами. Ибо бух могет передумать на ЛЮБОМ этапе, в том числе и после генерации... месяц спустя.
Вы решение смотрели? Как только "передумал" - регистрируется дырка и используется снова, как только понадобится.


Ну и? Бухи в восторге от номера месячной давности?

Я тебе открою страшную тайну
проблема "бухов и дырок" - не решается НИКАК и ни в каких условиях.
8 окт 09, 12:23    [7757930]     Ответить | Цитировать Сообщить модератору
 Re: Генераторы в MSSQL  [new]
demian111
Member

Откуда:
Сообщений: 6241
Glory
demian111
Glory
demian111

У меня к примеру таблоид на составном ключе типо: (id int,dt datetime)
Identity мне к этому делу ну никак не прикрутить!

А Identity разве мешает/запрещает составным ключам ?


Нет не мешает, но логики мешает!,
Объект(id) изменяется во времени(dt)

И причем тут Identity ? Вы значения ПК что ли меняете ?


Возможно это языковой барьер
Придется на пальцах объяснять:)
мне нужно вот так:
id    dt
--------------------
1     21.08.2009.103
1     21.08.2009.200
2     21.08.2009.103
2     21.08.2009.200
2     21.08.2009.300
id,dt это первичный ключ !!!, первичный ключ нихто не апдейтит!!!
8 окт 09, 12:33    [7757997]     Ответить | Цитировать Сообщить модератору
 Re: Генераторы в MSSQL  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5503
Блог
demian111
Потестил в многопоточном режиме, все нормально вроде бы:)
Ну, в предлагаемом решении аналогичная процедура есть, только она позволяет корректно работать с последовательностями, которые еще не зарегистрированы.
Это раз.

При многопоточной работе с такой процедурой напрямую, потоки будут блокировать друг друга до завершения транзакции, в которой, подозреваю, не только сиквенсы работают.
Это два.

Процедура - это классно, но попробуйте реализовать вот такой код с ней:

insert into Documents
    (
    DocID,
    DocNum,
    DocDate
    )
select
    newid(),
    -- А вот тут - нужно подставить номер документа, который генерируется по маске:
    -- текущий номер документа в рамках календарного месяца, 
    -- заданного параметром DocDate этого же документа и через "/" - номер месяца:
    G$Documents.NextValue('DocNum'+convert(varchar(4), DocDate, 12))+'/'+convert(varchar(2), DocDate, 1)
    DocDate
from openxml(.............)
А равно обоснуйте разработчикам, что пользоваться одной функцией в одном запросе - это не круто.
Круто - это куча дополнительных запросов, буферных таблиц, табличных переменных и курсоров.

2 aleks2 - не стоит фамильярничать - Вы даже не представились.
8 окт 09, 12:34    [7758009]     Ответить | Цитировать Сообщить модератору
 Re: Генераторы в MSSQL  [new]
Glory
Member

Откуда:
Сообщений: 104751
demian111

Возможно это языковой барьер
Придется на пальцах объяснять:)
мне нужно вот так:
id    dt
--------------------
1     21.08.2009.103
1     21.08.2009.200
2     21.08.2009.103
2     21.08.2009.200
2     21.08.2009.300
id,dt это первичный ключ !!!, первичный ключ нихто не апдейтит!!!

И вы считаете такую структуру правильной ?
8 окт 09, 12:37    [7758026]     Ответить | Цитировать Сообщить модератору
 Re: Генераторы в MSSQL  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5503
Блог
Кстати...
Давайте уже оставим обсуждение того, что кто-то не сталкивался с задачами типа нумерации счетов-фактур в с учетом требований российской ФНС.

Хотелось бы все-таки обсудить само решение.
8 окт 09, 12:41    [7758066]     Ответить | Цитировать Сообщить модератору
 Re: Генераторы в MSSQL  [new]
demian111
Member

Откуда:
Сообщений: 6241
DeColo®es,

1. newid() не круто, байтов слишком много:)
2. промежуточные таблицы, тож не круто, но это от ущербности MSSQL по отношению к тому же ORACLE, приходится извращаться. Это однозначное не абсолютно правильное решение но в некоторых случаях оно может подойти. У меня как раз тот случай:)
3. Кстати вариант неблокировочный это Экстендед процедура, ее и как функцию можно заюзать!

Glory,
Структуру считаю правильной, в рамках данной темы не стоит думаю разводить флуд, почему я так считаю.
Меня больше интересует, самое правильное,абсолютное, истинное решение по секвенсам!!!
8 окт 09, 12:57    [7758187]     Ответить | Цитировать Сообщить модератору
 Re: Генераторы в MSSQL  [new]
Glory
Member

Откуда:
Сообщений: 104751
demian111

Glory,
Структуру считаю правильной, в рамках данной темы не стоит думаю разводить флуд, почему я так считаю.
Меня больше интересует, самое правильное,абсолютное, истинное решение по секвенсам!!!

Хм. Т.е. те, кто с вами не согласен, разводят флуд ? Ну ладно
8 окт 09, 12:59    [7758196]     Ответить | Цитировать Сообщить модератору
 Re: Генераторы в MSSQL  [new]
aleks2
Guest
DeColo®es

2 aleks2 - не стоит фамильярничать - Вы даже не представились.


Ну вот еще один аноним требует визитку у другого анонима. Я ж тебя не заставляю выкидывать твой опус на свалку истории. Ты хотел услышать мнение - услышал... хе-хе... кто ж виноват шо оно тебе не понравилось?
8 окт 09, 13:04    [7758234]     Ответить | Цитировать Сообщить модератору
 Re: Генераторы в MSSQL  [new]
demian111
Member

Откуда:
Сообщений: 6241
Glory,

Ну вот все равно к флуду спускаемся:)
Без обид, просто мне долго придется объяснять почему именно так я я делаю, и почему именно так мне нужно.
Я столкнулся с проблемой секвенсов в MSSQL, и тему каторую поднял DeColo®es, мне очень интересна, вот именно по ней я и хотел бы получить ответы, а круто ли так делать!!!
Может кто то и покруче нашел решение!
Вот и все.
8 окт 09, 13:07    [7758256]     Ответить | Цитировать Сообщить модератору
 Re: Генераторы в MSSQL  [new]
Glory
Member

Откуда:
Сообщений: 104751
demian111
Glory,

Ну вот все равно к флуду спускаемся:)
Без обид, просто мне долго придется объяснять почему именно так я я делаю, и почему именно так мне нужно.
Я столкнулся с проблемой секвенсов в MSSQL, и тему каторую поднял DeColo®es, мне очень интересна, вот именно по ней я и хотел бы получить ответы, а круто ли так делать!!!
Может кто то и покруче нашел решение!
Вот и все.

Необходимость получения последовательности вне рамок одной таблицы целиком вытекает из выбранной схемы данных. Которую, как известно, определяет проектировщик, т.е. человек
8 окт 09, 13:12    [7758303]     Ответить | Цитировать Сообщить модератору
 Re: Генераторы в MSSQL  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
to DeColo®es и demian111

Я думаю Вы нашли друг друга, и тему можно закрывать:)
Что касается самой темы, не вижу никакого повода считать постулатом обязательное наличие "Оракловых" сиквенсов на всех прочих SQL серверах, так как смысла в них никакого не вижу тоже.
В каждой конкретной ситуации используется самое для неё уникальное и оптимальное решение, а притягивать за уши всякие там сиквенсы ко всевозможным ситуациям ИМХО нелогично и узколобо.
8 окт 09, 13:15    [7758336]     Ответить | Цитировать Сообщить модератору
 Re: Генераторы в MSSQL  [new]
demian111
Member

Откуда:
Сообщений: 6241
Glory,

Ну скажем так, я иногда слежу за форумом, и понимаю что "Эстонский Славик"(без обид), грамотный паренек.
Но с другой стороны кто ему дает право определять кто хороший проектировщик а кто ацтой?
Я избрал один путь, Ты другой, где у тя тормозит у меня летает, а где у меня не очень у тя супер-пупер.
Каждый выбирает свой путь изходя из опыта и знаний, и задач которые преследует проектировщик!!!. Задачи моей ты не знаешь!
Все таки Glory лучше давай по теме которую предложил DeColo®es,
а по проектированию мы с тобой еще может быть встретимся еще поспорим,обсудим:)
8 окт 09, 13:26    [7758410]     Ответить | Цитировать Сообщить модератору
 Re: Генераторы в MSSQL  [new]
demian111
Member

Откуда:
Сообщений: 6241
WarAnt
to DeColo®es и demian111

Я думаю Вы нашли друг друга, и тему можно закрывать:)

Подождем, может еще кто нить подтянется:))
8 окт 09, 13:36    [7758497]     Ответить | Цитировать Сообщить модератору
 Re: Генераторы в MSSQL  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
WarAnt
to DeColo®es и demian111

Я думаю Вы нашли друг друга, и тему можно закрывать:)
Нууу... они не одиноки
WarAnt
Что касается самой темы, не вижу никакого повода считать постулатом обязательное наличие "Оракловых" сиквенсов на всех прочих SQL серверах, так как смысла в них никакого не вижу тоже.
SEQUENCE'ы включены в стандарт SQL'99 и имеются не только в Оракле. И дело не только в стандарте, это просто удобный механизм генерации последовательности чисел. И более гибкий, чем IDENTITY.
WarAnt
В каждой конкретной ситуации используется самое для неё уникальное и оптимальное решение, а притягивать за уши всякие там сиквенсы ко всевозможным ситуациям ИМХО нелогично и узколобо.
По-Вашему напрочь отвергать необходимость какой-либой фичи и вместо этого сыпать обходными способами - признак "широкого" лба? ;)
8 окт 09, 13:49    [7758606]     Ответить | Цитировать Сообщить модератору
 Re: Генераторы в MSSQL  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Мне никогда не приходилось работать с бухгалтерией. Пожалуйста, объясните, зачем бухи хотят номера без дырок?

Я понимаю, если бы это для них обеспечивало хронологическую последовательность. бОльший номер - позже документ (просто как наследие от бумажных папок, когда нельзя было одним кликом мышки упорядочить по одному полю, а вторым - по другому). Но ведь если "дырку" недельной давности можно заткнуть номером сегодняшнего документа, то хронологией не пахнет. Зачем тогда?

Это не риторический вопрос, мне честно интересно.

Сообщение было отредактировано: 8 окт 09, 14:46
8 окт 09, 14:45    [7759010]     Ответить | Цитировать Сообщить модератору
 Re: Генераторы в MSSQL  [new]
demian111
Member

Откуда:
Сообщений: 6241
GreenSunrise,

У бухгалтеров особенно кто с продажами работают есть такая вешь как какая то там книжка(название точно не помню), куда они руками вписывают номера отгруженных накладных,суммы, и это они показывают налоговикам, номера должны идти по порядку без разрывов. А если разрывы все таки появляются(в силу каких либо ошибок) то объяснительная должна быть!
Это я все из своего опыта работы, сталкивался с этими бухгалтерами:)
8 окт 09, 15:07    [7759184]     Ответить | Цитировать Сообщить модератору
 Re: Генераторы в MSSQL  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
GreenSunrise
Мне никогда не приходилось работать с бухгалтерией. Пожалуйста, объясните, зачем бухи хотят номера без дырок?

Я понимаю, если бы это для них обеспечивало хронологическую последовательность. бОльший номер - позже документ (просто как наследие от бумажных папок, когда нельзя было одним кликом мышки упорядочить по одному полю, а вторым - по другому). Но ведь если "дырку" недельной давности можно заткнуть номером сегодняшнего документа, то хронологией не пахнет. Зачем тогда?

Это не риторический вопрос, мне честно интересно.
Они это так любят, что даже кушать не могут! ©
Считается, что если имеется пропуск в нумерации, то это попахивает воровством и махинациями.
Счета-фактуры не могут удаляться, а только переходить в состояние "аннулирован", это фиксируется в соответсвующем акте.
8 окт 09, 15:11    [7759219]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить