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

Откуда:
Сообщений: 15
В общем проблема такая, база большая и пользоваться вьюшкой из всех полей было не резонно, особенно когда нужно получить поле с одной таблицы, удовлетворяющее условию из другой. Была написана процедура с 60 входящими параметрами, которые проверяются на непустое значение и динамически генерируется оптимальный код для приджоинивания только необходимых таблиц базы. Так же для каждого параметра производится ряд действий, и изначально, чтоб не писать для каждого из 60-ти параметров один и тот же кусок кода, все параметры с названиями и значениями были загнаны во временную таблицу и от туда обычным циклом перелопачивались. Проблема появилась с одновременным использованием процедуры, данные во временной таблице перемешивались и получалась каша. Взялся обойти временную таблицу, но опять же не хочется 60 раз дублировать код для каждого параметра. Может есть способ поочередно получить значение и название параметра не явно указывая на него?
10 дек 12, 20:01    [13609252]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запорс  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
Данные во временных таблицах для разных сессий не перемешиваются, вы что-то путаете.
10 дек 12, 22:53    [13609828]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запорс  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
preslyel
Проблема появилась с одновременным использованием процедуры, данные во временной таблице перемешивались и получалась каша.
Фигню вы пишете. Временная таблица своя для каждой сессии.
10 дек 12, 23:00    [13609842]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запорс  [new]
##tbl ?
Guest
может он под временной таблицей имеет в виду ##tbl.
товарищ! замените ##tbl на #tbl
10 дек 12, 23:31    [13609899]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запорс  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31429
##tbl ?
может он под временной таблицей имеет в виду ##tbl.
товарищ! замените ##tbl на #tbl
Я думаю, он имеет в виду обычную таблицу, которая временно создана для этой операции
10 дек 12, 23:39    [13609917]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запорс  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
alexeyvg
##tbl ?
может он под временной таблицей имеет в виду ##tbl.
товарищ! замените ##tbl на #tbl
Я думаю, он имеет в виду обычную таблицу, которая временно создана для этой операции
Да-да-да. Я тоже иногда жигули мерседесами называю, а потом удивляюсь, что никто не понимает, о чем я.
11 дек 12, 01:25    [13610152]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запорс  [new]
гы,
Guest
особенно ТСу удался сабж !
11 дек 12, 01:50    [13610180]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запорс  [new]
preslyel
Member

Откуда:
Сообщений: 15
Да все правильно я написал (create table #param_value) . Пользователь был создан один, под ним конектилось много человек вот и получалась каша. Сейчас на время завел 4 пользователя, и клиенская часть проверяет на свободный конекшн. 4 тоже временами мало
11 дек 12, 11:50    [13611417]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запорс  [new]
Glory
Member

Откуда:
Сообщений: 104760
preslyel
Да все правильно я написал (create table #param_value) . Пользователь был создан один, под ним конектилось много человек вот и получалась каша.

Еще раз
Таблица #param_value видна только в соединении, где была создана
11 дек 12, 12:14    [13611598]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запорс  [new]
preslyel
Member

Откуда:
Сообщений: 15
Glory,
ок, смотри как выходит, запускаю выполнение процедуры на паре тысяч строк к примеру под sa, и пока работает пытаюсь запустить ту же процедуру под тем же sa к примеру exec recow @forsel='make', @model='Integra', @yera='2000-2010', и мне выдаёт не верный результат, и тут же могу просмотреть как во временной таблице меняются значения из-за параллельно выполняющейся под тем же пользователем процедуры для тех пары тысяч... разве это не то что я пытался обьяснить?
11 дек 12, 12:28    [13611720]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запорс  [new]
Glory
Member

Откуда:
Сообщений: 104760
preslyel
ок, смотри как выходит, запускаю выполнение процедуры на паре тысяч строк к примеру под sa, и пока работает пытаюсь запустить ту же процедуру под тем же sa к примеру exec recow @forsel='make', @model='Integra', @yera='2000-2010', и мне выдаёт не верный результат, и тут же могу просмотреть как во временной таблице меняются значения из-за параллельно выполняющейся под тем же пользователем процедуры для тех пары тысяч... разве это не то что я пытался обьяснить?


You can create local and global temporary tables. Local temporary tables are visible only in the current session, and global temporary tables are visible to all sessions. Temporary tables cannot be partitioned.

Prefix local temporary table names with single number sign (#table_name), and prefix global temporary table names with a double number sign (##table_name).

Вы вообще не можете из другого коннекта увидеть данные временной таблицы
11 дек 12, 12:33    [13611767]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запорс  [new]
preslyel
Member

Откуда:
Сообщений: 15
Glory,
Ну так, Сессия создается под пользователя? А если он один...
11 дек 12, 12:35    [13611792]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запорс  [new]
Glory
Member

Откуда:
Сообщений: 104760
preslyel
Glory,
Ну так, Сессия создается под пользователя? А если он один...

Вот упертый
Причем тут пользователь ?
11 дек 12, 12:36    [13611811]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запорс  [new]
офигеть
Guest
капец просто. ты один пользователь?
зайди в студио и открой 2 окна(2 сессии. ужас какой. 1 пользователь, а сессии 2!!!)
в одном окне набери
create table #t(id int);
insert into #t (id) values (1);
,
в другом
select * 
from #t;

и давай нам сюда копию экрана, ага?
или попробуй снова наврать, что не получил во втором окне
Msg 208, Level 16, State 0, Line 1
Invalid object name '#t'.
11 дек 12, 12:41    [13611853]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запорс  [new]
preslyel
Member

Откуда:
Сообщений: 15
Да ладно, не ругайтесь... тут и правда натупил. Значит не тут собака порылась... просто при одновременном использовании начинает лажать. Буду дальше искать
11 дек 12, 12:51    [13611954]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запорс  [new]
Гость333
Member

Откуда:
Сообщений: 3683
preslyel
Да ладно, не ругайтесь... тут и правда натупил. Значит не тут собака порылась... просто при одновременном использовании начинает лажать. Буду дальше искать

Судя по всему, что-то напутано с блокировками и уровнями изоляции.

Но с текущей архитектурой вы всё равно не сможете нормально отладиться. Хранимая процедура с 60 параметрами (причём "все параметры с названиями и значениями были загнаны во временную таблицу и от туда обычным циклом перелопачивались"), генерирующая динамический SQL — это кромешный пипец.

Начните с выделения нескольких сценариев использования вашей процедуры. Для каждого сценария напишите отдельную хранимую процедуру. Желательно без динамического SQL. Тогда уже разбирайтесь с параллельным выполнением.
11 дек 12, 16:16    [13613637]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить