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

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
получить значение из ХП MS SQL
    #36706511
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://sql.ru/forum/actualthread.aspx?tid=756611&hl=create+procedure+dbo+test

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

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

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

В твоем способе дырок в нумерации никак не избежать, нажмут случайно добавить и все, номер задействовался.
...
Рейтинг: 0 / 0
получить значение из ХП MS SQL
    #36706616
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
получить значение из ХП MS SQL
    #36706621
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriiпрошелмимо,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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