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

Откуда: Кемерово
Сообщений: 21
Первый раз делаю запрос с транзакцией, что нетак?

Задача: Прибавляю к значению в таблице еденичку, потом получаю это значение

Не работает: (значение увеличивает на 1 но в итоге fetch_array возвращает false)

SET XACT_ABORT ON;
BEGIN TRAN;
UPDATE config SET value=(value+1) WHERE module = 'voucher' AND submodule = 'requests' AND name = 'voucher_num';
SELECT value FROM config WHERE module = 'voucher' AND submodule = 'requests' AND name = 'voucher_num';
COMMIT TRAN;


Работает: (SELECT без UPDATE)

SET XACT_ABORT ON;
BEGIN TRAN;
SELECT value FROM config WHERE module = 'voucher' AND submodule = 'requests' AND name = 'voucher_num';
COMMIT TRAN;


Что не так?
28 дек 11, 11:44    [11837970]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE и SELECT в транзакции  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Артур aka ytppa,

SET XACT_ABORT ON;
BEGIN TRAN;
UPDATE config SET value=(value+1) WHERE module = 'voucher' AND submodule = 'requests' AND name = 'voucher_num';
COMMIT TRAN;
SELECT value FROM config WHERE module = 'voucher' AND submodule = 'requests' AND name = 'voucher_num';


Вот так попробуйте.
28 дек 11, 11:48    [11838018]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE и SELECT в транзакции  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5116
Артур aka ytppa
...но в итоге fetch_array возвращает false...

а вот это вот что такое?
28 дек 11, 11:58    [11838112]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE и SELECT в транзакции  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

set nocount on
в самое начало поставьте. или на клиенте разбирайтесь.

Posted via ActualForum NNTP Server 1.5

28 дек 11, 12:00    [11838126]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE и SELECT в транзакции  [new]
Артур aka ytppa
Member

Откуда: Кемерово
Сообщений: 21
Jovanny
Артур aka ytppa,

SET XACT_ABORT ON;
BEGIN TRAN;
UPDATE config SET value=(value+1) WHERE module = 'voucher' AND submodule = 'requests' AND name = 'voucher_num';
COMMIT TRAN;
SELECT value FROM config WHERE module = 'voucher' AND submodule = 'requests' AND name = 'voucher_num';


Вот так попробуйте.


-> Выдает тоже самое.
Я Транзакцию пытаюсь сделать, дабы недопустить одновременного использования этого значения (тут я храню "идентификатор", который будут присваивать записям в другой таблице.)


Дедушка
Артур aka ytppa
...но в итоге fetch_array возвращает false...

а вот это вот что такое?
if (!$q = sqlsrv_query($q3->conn, "
SET XACT_ABORT ON;
BEGIN TRAN;
UPDATE config SET value=(value+1) WHERE module = 'voucher' AND submodule = 'requests' AND name = 'voucher_num';
SELECT value FROM config WHERE module = 'voucher' AND submodule = 'requests' AND name = 'voucher_num';
COMMIT TRAN;"))
exit("Ошибка");
$r = sqlsrv_fetch_array($q);
var_dump($r);
28 дек 11, 12:04    [11838169]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE и SELECT в транзакции  [new]
Артур aka ytppa
Member

Откуда: Кемерово
Сообщений: 21
daw
set nocount on
в самое начало поставьте. или на клиенте разбирайтесь.

хооооо! Сработало, Спасибо!

Итог:

SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRAN;
UPDATE config SET value=(value+1) WHERE module = 'voucher' AND submodule = 'requests' AND name = 'voucher_num';
SELECT value FROM config WHERE module = 'voucher' AND submodule = 'requests' AND name = 'voucher_num';
COMMIT TRAN;
28 дек 11, 12:06    [11838199]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE и SELECT в транзакции  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
daw
set nocount on
в самое начало поставьте. или на клиенте разбирайтесь.


А в чём прикол? Особенности php?
28 дек 11, 12:10    [11838266]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE и SELECT в транзакции  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5116
Jovanny
daw
set nocount on
в самое начало поставьте. или на клиенте разбирайтесь.


А в чём прикол? Особенности php?

set nocount
28 дек 11, 12:13    [11838299]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE и SELECT в транзакции  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Дедушка,

IF OBJECT_ID('tempdb..#table') IS NOT NULL
DROP TABLE #table

CREATE TABLE #table (Id INT)

INSERT INTO #table
VALUES (1),(2),(3)

SELECT * FROM #table

SET NOCOUNT ON
SET XACT_ABORT ON

BEGIN TRANSACTION

UPDATE #table
SET Id = 4
WHERE Id = 1

SELECT * FROM #table

COMMIT TRANSACTION;

IF OBJECT_ID('tempdb..#table') IS NOT NULL
DROP TABLE #table


В SSMS работает хоть с SET NOCOUNT ON, хоть с SET NOCOUNT OFF.
28 дек 11, 12:44    [11838557]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE и SELECT в транзакции  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5116
Jovanny
Дедушка,
В SSMS работает хоть с SET NOCOUNT ON, хоть с SET NOCOUNT OFF.

а я разве утверждал обратное?
28 дек 11, 12:46    [11838586]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE и SELECT в транзакции  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Т.е. хотите сказать, что php видит количество обработанных строк вместо
SELECT value FROM config WHERE module = 'voucher' AND submodule = 'requests' AND name = 'voucher_num';

?
28 дек 11, 13:21    [11838971]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE и SELECT в транзакции  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> А в чём прикол? Особенности php?

не то чтоб конкретно php. но клиент не все сообщения от сервера (конкретно, сообщения
о количестве обработанных строк, отсылаемые при set nocount off), корректно не
обрабатывает - отсюда и проблема.

Posted via ActualForum NNTP Server 1.5

28 дек 11, 13:26    [11839027]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE и SELECT в транзакции  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5116
Jovanny
Т.е. хотите сказать, что php видит количество обработанных строк вместо
SELECT value FROM config WHERE module = 'voucher' AND submodule = 'requests' AND name = 'voucher_num';

?

я хочу сказать, что в SSMS у вас две такие закладочки в области результатов запроса и на каждой из них что то будет после выполнения запроса без nocount off
28 дек 11, 13:34    [11839080]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE и SELECT в транзакции  [new]
Jovanny
Member

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

Спасибо за разъяснение.
28 дек 11, 13:34    [11839083]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить