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

Откуда: Кишинёв
Сообщений: 6723
_Промешан_
Mnior
пропущено...
Ани просто не имеют его готовить. Это не свойство PRINT это свойство всех сообщений. Но чтобы отсылалось немедленно, поэтому я и написал выше:
пропущено...
Проглазели?
В общем тут почитайте 173816 и не проглазейте.
Ну вы и тормоз. Потому что я читал ту ссылку, поэтому я и написал, что ани (т.е. thyrstydog) не знают как работают сообщения. И поэтому надо писать WITH NoWait. Но до вас не допирает что такое no wait.

_Промешан_
И еще не проглазейте мой вопрос: как остановить выполнение цикла?
Вам уже написали.
И я тоже, но вы то слепой.
Mnior
Ну а прервать наличием некоторой константы в таблице/вьюхе.
Но сейчас обидится и не будет пользоваться данными механизмами, типа в отместку :D
21 авг 12, 21:48    [13045883]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание хода выполнения процедуры (в случае с курсором).  [new]
_Промешан_
Member

Откуда:
Сообщений: 969
Mnior
_Промешан_
пропущено...
В общем тут почитайте 173816 и не проглазейте.
Ну вы и тормоз. Потому что я читал ту ссылку, поэтому я и написал, что ани (т.е. thyrstydog) не знают как работают сообщения. И поэтому надо писать WITH NoWait. Но до вас не допирает что такое no wait.

_Промешан_
И еще не проглазейте мой вопрос: как остановить выполнение цикла?
Вам уже написали.
И я тоже, но вы то слепой.
Mnior
Ну а прервать наличием некоторой константы в таблице/вьюхе.
Но сейчас обидится и не будет пользоваться данными механизмами, типа в отместку :D

А вы завязывайте со "скоростью" и кучей кофе. И на медленной (а точнее нормальной скоростью) начнете замечать окружающие вас вещи, людей, в том числе вот это 147592 из того же топика, который, как вы утверждаете "я читал ту ссылку". Возникает вопрос - не умеют готовить или может вы читать не умете? Вы сами-то попробовали, прежде чем предложить или так, чисто теоретически?


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

пс: ну вы это, снимите с газа-то. Хорош уже.
22 авг 12, 13:36    [13048945]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание хода выполнения процедуры (в случае с курсором).  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
_Промешан_
Возникает вопрос - не умеют готовить или может вы читать не умете?
Ну да, при использовании PRINT нельзя указать WITH NoWait, соответственно наблюдаются "особенности" поведения. Если написать PRINT через RAISERROR с указанной директивой то, указанного наблюдаться не будет.
_Промешан_
Вы сами-то попробовали, прежде чем предложить или так, чисто теоретически?
Если бы вы сами попробовали, то вы бы не стали ссылать на тот ничего не говорящий пост.
А так и написали "Попробовал WITH NOWAIT - не работает" и я тогда бы я потребовал привести код.
_Промешан_
Смысла в райзерроре не вижу, если все равно надо пользовать таблицу.
Естественно, если он решает другую задачу - уведомление хода проведения процесса.
_Промешан_
Вот если бы можно было без таблицы, тогда это большой смысл, т.к. план выполнения на неск процентов выиграет.
С чего вы это решили?
Зачем вы делаете проблемы на ровном месте.
Если надо контролить выполнение цикла, то ставите в нём проверку на существование (объекта, записи, константы - совершенно неважно) и всё. Чё парится то? Тип проверки на скорость не влияет совершенно, а само наличие необходимо в постановке задачи.
22 авг 12, 17:10    [13050828]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание хода выполнения процедуры (в случае с курсором).  [new]
invm
Member

Откуда: Москва
Сообщений: 9425
_Промешан_,

Как в вашем коде (курсор + вызов процедуры в цикле) обеспечивается целостность данных?
22 авг 12, 17:17    [13050874]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание хода выполнения процедуры (в случае с курсором).  [new]
_Промешан_
Member

Откуда:
Сообщений: 969
Mnior
_Промешан_
Возникает вопрос - не умеют готовить или может вы читать не умете?
Ну да, при использовании PRINT нельзя указать WITH NoWait, соответственно наблюдаются "особенности" поведения. Если написать PRINT через RAISERROR с указанной директивой то, указанного наблюдаться не будет.
_Промешан_
Вы сами-то попробовали, прежде чем предложить или так, чисто теоретически?
Если бы вы сами попробовали, то вы бы не стали ссылать на тот ничего не говорящий пост.
А так и написали "Попробовал WITH NOWAIT - не работает" и я тогда бы я потребовал привести код.
_Промешан_
Смысла в райзерроре не вижу, если все равно надо пользовать таблицу.
Естественно, если он решает другую задачу - уведомление хода проведения процесса.
_Промешан_
Вот если бы можно было без таблицы, тогда это большой смысл, т.к. план выполнения на неск процентов выиграет.
С чего вы это решили?
Зачем вы делаете проблемы на ровном месте.
Если надо контролить выполнение цикла, то ставите в нём проверку на существование (объекта, записи, константы - совершенно неважно) и всё. Чё парится то? Тип проверки на скорость не влияет совершенно, а само наличие необходимо в постановке задачи.
Ну в том и дело, что там написано про RAISERROR в комбинации с nowait. ну тем не менее, по счастью, в SDAC все работает отлично.
Если есть проверка существования, ну скажем, таблицы, или записи в некоторой таблице, то там же в ней можно и таймер накручивать. Тогда можно и без райзэррора обойтись. Но с другой стороны лучше от этого не станет.
Вот думаю, как советовали, может проще (хотя и менее безопасно) убивать процесс. Но тогда нужны будут сусдба права, я так понимаю, любому пользователю.

Как в вашем коде (курсор + вызов процедуры в цикле) обеспечивается целостность данных?

Почти никак. Этого впринципе достичь не удастся, поскольку данных очень много и ждать чистого чтения нам некогда.
А есть идеи, что бы не было простоя?
22 авг 12, 18:26    [13051327]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание хода выполнения процедуры (в случае с курсором).  [new]
invm
Member

Откуда: Москва
Сообщений: 9425
_Промешан_
Как в вашем коде (курсор + вызов процедуры в цикле) обеспечивается целостность данных?

Почти никак. Этого впринципе достичь не удастся, поскольку данных очень много и ждать чистого чтения нам некогда.
Причем здесь количество данных и какое-то "чистое" чтение? Вы понимаете, что такое целостность (согласованность) данных?
Так вот, что будет с этой самой целостностью, если соединение будет убито на выполнении UpdateMainSP?
Кстати, что для вас "чистое" чтение? Когда нет конкурирующих операций записи? Ну так есть средства обеспечить такое поведение.
_Промешан_
А есть идеи, что бы не было простоя?
Что бы не было простоя, нужно бороться с причиной оного, а не со следствием, а именно привести схему БД в порядок и отказаться от работы с ней циклами да курсорами.
22 авг 12, 20:03    [13051697]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание хода выполнения процедуры (в случае с курсором).  [new]
_Промешан_
Member

Откуда:
Сообщений: 969
invm
_Промешан_
пропущено...

Почти никак. Этого впринципе достичь не удастся, поскольку данных очень много и ждать чистого чтения нам некогда.
Причем здесь количество данных и какое-то "чистое" чтение? Вы понимаете, что такое целостность (согласованность) данных?
Так вот, что будет с этой самой целостностью, если соединение будет убито на выполнении UpdateMainSP?
Кстати, что для вас "чистое" чтение? Когда нет конкурирующих операций записи? Ну так есть средства обеспечить такое поведение.
_Промешан_
А есть идеи, что бы не было простоя?
Что бы не было простоя, нужно бороться с причиной оного, а не со следствием, а именно привести схему БД в порядок и отказаться от работы с ней циклами да курсорами.
Ах в этом смысле.
Процедура устроена так, что с целостностью все ок в случае прерывания табличным методом, т.к. проверка существования таблицы-прогресса стоит после выполнения всех нужных процессов над одной единицей данных.
А вот в случае убиения процесса - да, будет косяк.
22 авг 12, 20:20    [13051734]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание хода выполнения процедуры (в случае с курсором).  [new]
_Промешан_
Member

Откуда:
Сообщений: 969
Что бы не было простоя, нужно бороться с причиной оного, а не со следствием, а именно привести схему БД в порядок и отказаться от работы с ней циклами да курсорами.

Нет такой возможности.
Нельзя будет выполнить то, что заложено в этой процедуре одним или несколькими запросами. Поэтому во всех местах, где возможно (на сколько мне известно) курсор убран, в тех же, где этого логически никак не сделать - оставлен.

Но я не теряю надежду, что можно привести проставление произвольного количества параметров к произвольному количеству товаров посредством одного или нескольких запросов без циклов.
22 авг 12, 20:26    [13051754]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание хода выполнения процедуры (в случае с курсором).  [new]
invm
Member

Откуда: Москва
Сообщений: 9425
_Промешан_
Что бы не было простоя, нужно бороться с причиной оного, а не со следствием, а именно привести схему БД в порядок и отказаться от работы с ней циклами да курсорами.

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

_Промешан_
Но я не теряю надежду, что можно привести проставление произвольного количества параметров к произвольному количеству товаров посредством одного или нескольких запросов без циклов.
п.п. 4 и 6
22 авг 12, 21:47    [13052003]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание хода выполнения процедуры (в случае с курсором).  [new]
_Промешан_
Member

Откуда:
Сообщений: 969
invm
_Промешан_
пропущено...

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

_Промешан_
Но я не теряю надежду, что можно привести проставление произвольного количества параметров к произвольному количеству товаров посредством одного или нескольких запросов без циклов.
п.п. 4 и 6
насчет п.4 согласен. косяк.
п.6 - данный топик связан вот с этим 13039253. Здесь есть описание.
За исключением того, что как там описано Tools имеет параметры не только в таблице, но и в других таблицах (у одного товара может быть 300 параметров - это конечно клиника, но к тому, что они не хранятся вместе с таблицей Tools).

Категоричность из опыта. Но надежду я не теряю.
23 авг 12, 18:56    [13057154]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание хода выполнения процедуры (в случае с курсором).  [new]
_Промешан_
Member

Откуда:
Сообщений: 969
по пп 4

Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64)   Sep 21 2011 22:45:45   Copyright (c) 1988-2008 Microsoft Corporation  Standard Edition (64-bit) on Windows NT 6.0 <X64> (Build 6002: Service Pack 2) 
23 авг 12, 18:56    [13057158]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание хода выполнения процедуры (в случае с курсором).  [new]
invm
Member

Откуда: Москва
Сообщений: 9425
_Промешан_,

Каким образом 13039253 связан с задачей
_Промешан_
Но я не теряю надежду, что можно привести проставление произвольного количества параметров к произвольному количеству товаров посредством одного или нескольких запросов без циклов.
?
23 авг 12, 20:11    [13057327]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание хода выполнения процедуры (в случае с курсором).  [new]
_Промешан_
Member

Откуда:
Сообщений: 969
invm
_Промешан_,

Каким образом 13039253 связан с задачей
_Промешан_
Но я не теряю надежду, что можно привести проставление произвольного количества параметров к произвольному количеству товаров посредством одного или нескольких запросов без циклов.
?
Вот таким 13057243

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

Есть идеи как это реализовать без цикла?
25 авг 12, 14:00    [13063670]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание хода выполнения процедуры (в случае с курсором).  [new]
invm
Member

Откуда: Москва
Сообщений: 9425
_Промешан_,

Ну если ни схем таблиц, ни тестовых данных, ни желаемого результата вы предоставлять не желаете, то что вы от нас хотите?
Телепаты сюда не заходят.
25 авг 12, 15:10    [13063797]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание хода выполнения процедуры (в случае с курсором).  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
_Промешан_
Это означает, что есть таблица товаров, в которой есть поля, которые надо проставить, и несколько дополнительных таблиц, которые ссылаются на таблицу товаров и хранят в себе параметры товара.
Кроме этого, есть таблица масок, по которой необходимо проставить эти параметры к каждому товару, который подходит по маске.

Есть идеи как это реализовать без цикла?
Чего-то я не понимаю, зачем здесь цикл.
Ну написать последовательно столько запросов, сколько всего таблиц с параметрами. Запросов вида:
insert into ПараметрыТоваров (...)
select a.id,c.*
from ТаблицаТоваров a
  inner join ТаблицаМасок b on a.код like b.маска
  inner join Параметры c on c.id=b.id
Может быть, для того, чтобы не записывать все параметры сразу (если их там миллионы), а потихоньку добавлять в цикле, чтобы сервер не упал?
25 авг 12, 15:12    [13063804]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание хода выполнения процедуры (в случае с курсором).  [new]
_Промешан_
Member

Откуда:
Сообщений: 969
Serg_77m
_Промешан_
Это означает, что есть таблица товаров, в которой есть поля, которые надо проставить, и несколько дополнительных таблиц, которые ссылаются на таблицу товаров и хранят в себе параметры товара.
Кроме этого, есть таблица масок, по которой необходимо проставить эти параметры к каждому товару, который подходит по маске.

Есть идеи как это реализовать без цикла?
Чего-то я не понимаю, зачем здесь цикл.
Ну написать последовательно столько запросов, сколько всего таблиц с параметрами. Запросов вида:
insert into ПараметрыТоваров (...)
select a.id,c.*
from ТаблицаТоваров a
  inner join ТаблицаМасок b on a.код like b.маска
  inner join Параметры c on c.id=b.id
Может быть, для того, чтобы не записывать все параметры сразу (если их там миллионы), а потихоньку добавлять в цикле, чтобы сервер не упал?
Разумеется и не без этого.
Плюс там еще есть пересчеты различные на главную таблицу замапленные.
А в таблице масок находится след инфа: тип параметра, ид параметра, значение параметра.
Типов параметров (то есть буквально varchar, bit, int, float) - 6 штук. Есть еще параметры типа один ко многим (то есть когда галочками проставлено). Плюс в зависимости от типа параметра, данные проставляются в ту или иную таблицу. То есть есть параметры которые добавляются в ТаблицуПараметров. А есть, которые проставляются в Товары. И простым CASE тут не отделаешься.
Может конечно есть какие-то изощренные варианты перечислений, но я таких не знаю. Да и тем более тут все равно предлагают рефакторинг делать.
27 авг 12, 18:36    [13071947]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание хода выполнения процедуры (в случае с курсором).  [new]
_Промешан_
Member

Откуда:
Сообщений: 969
invm
_Промешан_,

Ну если ни схем таблиц, ни тестовых данных, ни желаемого результата вы предоставлять не желаете, то что вы от нас хотите?
Телепаты сюда не заходят.

-- товары
Tools (ToolsId int, Name varchar(200), bitFlag int, Width float, Length float, MinimalQuantity int, DescriptionId int, AdditionalDescId)
-- набор параметров
Params(Name varchar(200), ParamsId smallint, ParamTypeId smallint);
-- набор значений параметров в связке с товарами
ParamValue (ParamValueId int,ToolsId int,ParamsId smallint, IntValue int, FloatValue float, StrValue varchar(255), ComboboxValueId int);
-- набор значений для комбобоксов и групповых селекторов
ComboboxValues (ComboboxId int,Name varchar(200))
-- набор значений в случае выбора нескольких значений.
MultiParamValue(ParamValueId int, ComboboxId int);


Вот примерно такая структура данных. Есть еще неявная таблица ParamType, которая обозначает, какой тип значения используется в ParamValue и откуда брать значение (из какого поля/таблицы), так же как и куда вставлять значение.
27 авг 12, 18:45    [13071988]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание хода выполнения процедуры (в случае с курсором).  [new]
_Промешан_
Member

Откуда:
Сообщений: 969
Все поля Tools а так же поля ParamValue и далее по списку - в зависимости от типа параметра или от его id могут быть изменены в данном цикле.
27 авг 12, 18:46    [13071994]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание хода выполнения процедуры (в случае с курсором).  [new]
invm
Member

Откуда: Москва
Сообщений: 9425
_Промешан_,

Не знаю как коллеги, а я до сих пор так и не могу понять что вам на самом деле нужно получить. И из чего.
Если вы не поленитесь подготовить тестовые наборы данных и желаемый результат, то, думается, дело сдвинется с мертвой точки.
27 авг 12, 19:15    [13072119]     Ответить | Цитировать Сообщить модератору
 Re: Отслеживание хода выполнения процедуры (в случае с курсором).  [new]
телепауэ
Guest
ну понятно. клиентские задачи смешали с бдшными, от всей этой каши ждут какой-то прозрачности. и чтоб на форуме без подробностей все догадались с первого раза о чем речь.

насколько хватает фантазии:
- "неповторимые" свойства товаров для каких-то целей хранятся в реляционном виде
- "клиент" туповат, мертвоват, в качестве осинового кольчика выбрана генерация списков (содержимого) кобиков и чеклистов (для все тех же неповторимых свойств) на стороне сиквела и хранение этих сгенеренных списков в реляционном виде
- похоже что там не только EAV, там еще и перегенерация DML происходит. т.е. свойство с комбиком выворачивается в столбец, FK и справочник; свойство с чекбоксом - в столбец, FK, линковочную таблицу, еще FK и справочник.

я так понимаю, задача периодическая, т.е. не онлайновая.

если все примерно так, то (не вдаваясь про смысл и качество концепции) больше подошел бы job или даже консольное приложение.
цикл имеет смысл переделать с цикла "по всему что есть вдоль поперек" на цикл по группам/видам товаров.
в плане job можно группы товаров отдельными step'ами сделать.
27 авг 12, 19:55    [13072255]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3]      все
Все форумы / Microsoft SQL Server Ответить