Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / получить значение из ХП MS SQL / 20 сообщений из 20, страница 1 из 1
24.06.2010, 17:02
    #36706482
Valerii
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить значение из ХП MS SQL
Народ,
есть ХП на сервере:

CREATE PROCEDURE dbo.neworders
@@newNrOrders numeric(10)=0 OUTPUT with recompile
AS
DECLARE @xNewOrder Numeric(10)

select @xnewOrder = nr_orders + 1 FROM NewOrder
update newOrder SET nr_orders = @xnewOrder
select @@newNrOrders = @xnewOrder
RETURN @@newNrOrders
GO

Пытаюсь заполучить значенеие @@newNrOrders в VFP при помощи SQLEXEC:
= SQLEXEC(gnConnHandle, Exec_String) где Exec_String = [EXEC NewOrders @retVal]
Но не отрабатывается корректно возврат значения из ХП в переменную retVal.
Подскажите как правильно, спс заранее.
...
Рейтинг: 0 / 0
24.06.2010, 17:07
    #36706511
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить значение из ХП MS SQL
http://sql.ru/forum/actualthread.aspx?tid=756611&hl=create+procedure+dbo+test

+ там ссылка на обсуждение на др.форум
...
Рейтинг: 0 / 0
24.06.2010, 17:11
    #36706517
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить значение из ХП MS SQL
+ вопрос.

это реализация какого-то нумератора с наращением - не лисапед?
точно через ХП нужно реализвать или рассматривались другие способы реализации?
...
Рейтинг: 0 / 0
24.06.2010, 17:24
    #36706558
Valerii
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить значение из ХП MS SQL
прошелмимо,

есть другие варианты как заполучить уникальный номер док. в MS SQL, когда одновременно в работают до 50 человек?
...
Рейтинг: 0 / 0
24.06.2010, 17:33
    #36706589
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить значение из ХП MS SQL
Valeriiесть другие варианты как заполучить уникальный номер док. в MS SQL, когда одновременно в работают до 50 человек?
Изначально новый документ может быть без номера, а при сохранении (добавлении в базу) номер присваивается в триггере.

В твоем способе дырок в нумерации никак не избежать, нажмут случайно добавить и все, номер задействовался.
...
Рейтинг: 0 / 0
24.06.2010, 17:41
    #36706616
получить значение из ХП MS SQL
Valeriiесть другие варианты как заполучить уникальный номер док. в MS SQL, когда одновременно в работают до 50 человек?И не один. В твоем варианте аж три оператора, между которыми могут влезть другие коннекты и ты получишь задвоения.
Код: plaintext
1.
2.
select @xnewOrder = nr_orders +  1  FROM NewOrder 
update newOrder SET nr_orders = @xnewOrder
select @@newNrOrders = @xnewOrder
То есть твой вариант рабочий на малых количествах коннектов.
...
Рейтинг: 0 / 0
24.06.2010, 17:42
    #36706621
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить значение из ХП MS SQL
Valeriiпрошелмимо,

есть другие варианты как заполучить уникальный номер док. в MS SQL, когда одновременно в работают до 50 человек?

я не готов ответить однозначно, все зависит от целей и т.д.

в моей практике была реализация
сложных нумераторов аля "Валя10июн2010_руб_1045"
(с аналитикой в номере).
...
Рейтинг: 0 / 0
24.06.2010, 17:43
    #36706623
Valerii
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить значение из ХП MS SQL
проходящий.,

Что предлагаешь в таком случае? Блокировать эту запись?
...
Рейтинг: 0 / 0
24.06.2010, 18:01
    #36706668
получить значение из ХП MS SQL
Valeriiпроходящий.,

Что предлагаешь в таком случае? Блокировать эту запись?И как собрался рулить блокировками на сервере? Это ведь не фокс. Сходи на соседний форум по серверу и почитай. Тема изобретения лисапеда с генерацией ключей видимо вечная.
...
Рейтинг: 0 / 0
24.06.2010, 18:08
    #36706690
Valerii
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить значение из ХП MS SQL
проходящий.,

почему нет? на мгновенье, тут делов для сервака пару тактов проца..
потом после вполнения процедуры высвободить...
...
Рейтинг: 0 / 0
24.06.2010, 18:19
    #36706716
Ffffffffffffffff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить значение из ХП MS SQL
Если это SQLServer, @@Identity или SCOPE_IDENTITY( )
сразу после Insert дает последнее значение индекса. Все можно сделать в одной процедуре. Зачем гонять данные туда-сюда?
...
Рейтинг: 0 / 0
24.06.2010, 18:23
    #36706723
Valerii
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить значение из ХП MS SQL
Ffffffffffffffff,

проблема в том что нужно вставить документ в котором могут быть от 1 до нескольких десятков записей. и этому доку нужен уникальный номер.
...
Рейтинг: 0 / 0
24.06.2010, 18:29
    #36706730
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить значение из ХП MS SQL
> Автор: Valerii
> проблема в том что нужно вставить документ в котором могут быть от 1 до нескольких десятков записей. и этому доку
> нужен уникальный номер.

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

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
24.06.2010, 18:29
    #36706731
Ffffffffffffffff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить значение из ХП MS SQL
Прислушайтесь к данным советам.
То, что вы написали, не проблема, а совершенно стандартная ситуация.
...
Рейтинг: 0 / 0
24.06.2010, 19:13
    #36706809
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить значение из ХП MS SQL
ValeriiПытаюсь заполучить значенеие @@newNrOrders в VFP при помощи SQLEXEC:
= SQLEXEC(gnConnHandle, Exec_String) где Exec_String = [EXEC NewOrders @retVal]
Но не отрабатывается корректно возврат значения из ХП в переменную retVal.
Подскажите как правильно, спс заранее.
Как получить значение выходного параметра процедуры сервера

По поводу кода процедуры Вам правильно посоветовали сделать поиск в форуме по MS SQL по ключевому слову "Счетчик". Там и примеры приводили и объясняли про проблемы.

Но вообще-то, можно просто сделать поле номера со свойством Identity. Как с ним работать описано здесь

Как прочитать значение поля со свойством IDENTITY
...
Рейтинг: 0 / 0
24.06.2010, 19:14
    #36706811
Valerii
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить значение из ХП MS SQL
Игорь Горбонос,

Так об этом же и речь. Есть Отдельная! таблица на сервере, с одной записью, в ней один столбец,
который инкрементируется и с которого потом тут же считывается новое значение для сохраняемого документа. Просто нужно добиться 100% УНИКАЛЬНОСТИ при одновременной работе более 100 клиентов. Мысль в следующем, можно это поле сделать Identity, у каждый раз удалять запись после вставки и считывания, при этом значение Indentity не обнуляется.
Но как-то это не красиво. Красивее на мой взгляд это временная блокировка записи/поля на момент записи чтения. Разве это не самый правильный и оптимальный вариант для любого более менее шустрого сервера?
Что скажете? Я долго мучаюсь с этим вопросом, те коменты - просто общие фразы, а вот конкретный пример фокса как это корректноорганизовать - никто не предложил.
...
Рейтинг: 0 / 0
24.06.2010, 19:27
    #36706834
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить значение из ХП MS SQL
ValeriiКрасивее на мой взгляд это временная блокировка записи/поля на момент записи чтения. Разве это не самый правильный и оптимальный вариант для любого более менее шустрого сервера?
Проблема в том, что за блокировками надо следить. Иначе можете получить deadLock (мертвые блокировки). В общем случае, это очень не тривиальная задача. Поэтому, чем меньше блокировок, тем лучше.

Как мне кажется, если не стоит вопрос отслеживания факта существования записи, то проще делать так

Код: plaintext
\n-- Тестовая таблица\n-- f1 - код (идентификатор) записи\n-- f2 - счетчик записи\n\nif object_id(\'TempDB..#test\') is not null drop table #test\ncreate table #test (f1 int, f2 int)\ninsert into #test values ( 1 , 1 )\n\n-- Получение очередного номера из записи с кодом 1\ndeclare @nextVal int\n\nupdate #test \nset @nextVal = f2 = f2 +  1 \nwhere f1 =  1 \n\nselect @nextVal\n

Собственно, в разном виде Вам это вариант уже предложили на форуме по MS SQL. Недостатком данного способа является тот факт, что если записи с таким иеднтификатором не существует, то у Вас проблемы. Какие проблемы? Ну, почитайте, например, вот это обсуждение Покритикуйте счетчик....
...
Рейтинг: 0 / 0
24.06.2010, 19:53
    #36706865
получить значение из ХП MS SQL
ValeriiИгорь Горбонос,

Так об этом же и речь. Есть Отдельная! таблица на сервере, с одной записью, в ней один столбец,
который инкрементируется и с которого потом тут же считывается новое значение для сохраняемого документа. Просто нужно добиться 100% УНИКАЛЬНОСТИ при одновременной работе более 100 клиентов. Мысль в следующем, можно это поле сделать Identity, у каждый раз удалять запись после вставки и считывания, при этом значение Indentity не обнуляется.А теперь объясните каким образом уникальность у Вас так сильно завязана на бездырочность? Зачем надо что-то удалять?
Но как-то это не красиво.Угу. Ибо бессмысленно. Не надо придумывать самому себе проблемы. Красивее на мой взгляд это временная блокировка записи/поля на момент записи чтения.Батенька, sql сервер - многопользовательская система. Со своей системой управления блокировками. Настроенная людьми много лет занимающимися именно этой проблемой. Потому Ваше предложение выглядит как предложение самостоятельно делать себе все даже при наличии более качественного готового. Разве это не самый правильный и оптимальный вариант для любого более менее шустрого сервера?Нет. И дело не в шустрости.
...
Рейтинг: 0 / 0
24.06.2010, 21:28
    #36706973
Eugenkru10
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить значение из ХП MS SQL
Valeriiпрошелмимо,

есть другие варианты как заполучить уникальный номер док. в MS SQL, когда одновременно в работают до 50 человек?
Ипользуй функцию времени или SYS(2015).
...
Рейтинг: 0 / 0
25.06.2010, 11:44
    #36707722
H000h
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получить значение из ХП MS SQL
Да тебя вообще это колышить не должно. Хоть 1000050 ченловек, сервер сам разберется на счет уникальности, если пользоваться штатными средствами сервера которые тебе озвучены.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / получить значение из ХП MS SQL / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]