|
SQL Reporting выполняет StoredProcedure. Возникает блокировка. Как быть?
|
|||
---|---|---|---|
#18+
При создании отчета сначала выполняется вставка данных в физическую табличку на сервере, а уже потом из этой физической таблицы - чтение. То есть что то вроде - exec [моя хранимая процедура которая вставляет в таблицу] и затем select [из этой таблицы]. Естественно в ситуации просмотра отчета несколькими пользователями возникнет блокировка - оба попытаются вставить данные в таблицу, как избежать такого? Где почитать? Я слышал что блокировки нужно делать на уровне приложения а не на серверной стороне. Как быть с ReportingServices? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2014, 12:47 |
|
SQL Reporting выполняет StoredProcedure. Возникает блокировка. Как быть?
|
|||
---|---|---|---|
#18+
Santa89, Я тоже хожу брожу вокруг этой проблемы. Решения пока не нашел. Проблема в том, что вставка и чтение происходят в рамках одной длинной транзакции. Причем внутри процедуры куча инсертов, апдейтов и делете. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2014, 13:32 |
|
SQL Reporting выполняет StoredProcedure. Возникает блокировка. Как быть?
|
|||
---|---|---|---|
#18+
Santa89, Попробуйте использовать локальную временную таблицу для хранения промежуточных результатов. Что-то вроде такого: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Тогда у вас различные транзакции не будут видеть друг друга. Если же insert помещен в хранимку, как в Вашем случае, то надо использовать глобальную временную таблицу (##tmpTab). Но я не уверен, что не возникнет та же самая блокировка, лучше проверьте сами. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2014, 14:34 |
|
SQL Reporting выполняет StoredProcedure. Возникает блокировка. Как быть?
|
|||
---|---|---|---|
#18+
MadmechЕсли же insert помещен в хранимку, как в Вашем случае, то надо использовать глобальную временную таблицу (##tmpTab). Но я не уверен, что не возникнет та же самая блокировка, лучше проверьте сами. Пробовали глобальную временную - таже история. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2014, 14:40 |
|
SQL Reporting выполняет StoredProcedure. Возникает блокировка. Как быть?
|
|||
---|---|---|---|
#18+
Klick, Так, сейчас у нас используется связка Oracle + SSRS, поэтому, возможно, таких ситуаций и не возникало. Но я припоминаю, что на прошлой работе я в аналогичной ситуации выкрутился следующим образом: 1. Сначала создаете хранимку под insert, предполагая в уме, что "времянка" у Вас уже созадана: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
2. Далее создаете основную хранимку, в которую помещаете запуск побочной хранимки из п.1: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
3. В отчете в DataSet помещаете запуск главной хранимки: Код: sql 1.
Я сейчас проверил - эта схема работает, по крайней мере, в Management Studio. Плюс, можно поместить первоначально указанный мной код в одну хранимку и запускать уже ее без нагромождения доп. построений. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2014, 15:28 |
|
SQL Reporting выполняет StoredProcedure. Возникает блокировка. Как быть?
|
|||
---|---|---|---|
#18+
Madmech, Спасибо. В данном варианте решение хорошее. Но как быть, если мне надо вернуть множество рекордсетов. У меня одна хранимка делает расчеты, а вторая делает 7 селектов к этим таблицам. И все это в рамках одно длинной транзакции. Потому как RS, по другому не выполнит хранимки в нужной последовательности. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2014, 15:37 |
|
SQL Reporting выполняет StoredProcedure. Возникает блокировка. Как быть?
|
|||
---|---|---|---|
#18+
Klick, Посмотрите вот это сообщение , да и вообще весь тот тред. Кажется, это то, что Вам нужно. Я еще вспомнил, что в той ситуации, о которой упоминал выше, я именно так и создавал динамически глоб. временную таблицу, предварительно уничтожив уже существующую. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2014, 16:58 |
|
SQL Reporting выполняет StoredProcedure. Возникает блокировка. Как быть?
|
|||
---|---|---|---|
#18+
Только не так: Код: sql 1. 2. 3.
А вот так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
select * into .... вызывает блокировку схемы, поэтому должен длиться как можно меньше. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2014, 11:09 |
|
|
start [/forum/topic.php?fid=31&msg=38564739&tid=1533778]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 272ms |
total: | 397ms |
0 / 0 |