|
Простой SELECT инвалидирует транзакцию
|
|||
---|---|---|---|
#18+
Не пойму от чего вдруг такая особенность поведения и как ее можно обойти Имеется sp, которая зовет динамический SQL типа Код: sql 1. 2. 3. 4. 5. 6.
Примерно так Код: sql 1.
В общем не суть важно, что там за таблицы и синтакс, все там нормально. Между двумя запросами except. Он читает результат в переменную @DataCompareCount. Если же структуры запросов чуть не совпадают, типа у одного в первой колонке int, а у второго Date, то возникает Conversion error. Логично. Я этот exception ловлю. Но засада в том, что эта sp зовется в рамках транзакции извне. И из-за банального неправильного selecta-а XACT_STATE валится в -1 и я больше ничего не могу сделать в этой sp, например проапдейдить таблицу, записав туда "Структуры запросов не совпадают". Ибо Код: sql 1.
Попробовал искомую таблицу в память переместить, так нет, у меня видите ли, кое-где в коде встречается другая БД! А при таких условиях https://www.sqlservercentral.com/forums/topic/memory-optimized-tables-cross-db-access. Подумал сразу об автономных транзакциях через loopback (в этом месте ораклисты смеются обычно) Еще вариант гугл советует - CLR. Но все же, может быть есть ли варианты попроще? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 17:07 |
|
Простой SELECT инвалидирует транзакцию
|
|||
---|---|---|---|
#18+
PS: Точнее, понятно, почему транзакция инвалидируется с точки зрения документации. Непонятно с т.зр здравого смысла. Вопрос -есть ли какой-то хитрый метод это обойти без особого дополнительного кодинга. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 17:21 |
|
Простой SELECT инвалидирует транзакцию
|
|||
---|---|---|---|
#18+
Glebanski, Что мешает добавить проверку типов по словарю вместо падения по ошибке? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 17:21 |
|
Простой SELECT инвалидирует транзакцию
|
|||
---|---|---|---|
#18+
Glebanski Но все же, может быть есть ли варианты попроще? Ещё можно в приложении анализировать ошибку, и "проапдейдить таблицу, записав туда "Структуры запросов не совпадают"". Обработчик ошибок в сиквеле плохой, и автономных транзакций тоже нет, проектируйте архитектуру исходя из этого, ничего не поделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 17:52 |
|
Простой SELECT инвалидирует транзакцию
|
|||
---|---|---|---|
#18+
Glebanski, В целом архитектура вычитания звёздочек выглядит "альтернативно одарённой", может стоит что-то поменять в консерватории? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 17:59 |
|
Простой SELECT инвалидирует транзакцию
|
|||
---|---|---|---|
#18+
env Glebanski, Что мешает добавить проверку типов по словарю вместо падения по ошибке? Пройденный этап. Если одном датасете Attr = 1 ,и в другом тоже 1, то это прекрасно. Но если первый smalltint , а второй вдруг int , то кирдык сравнению типов по словарю В целом архитектура вычитания звёздочек выглядит "альтернативно одарённой", может стоит что-то поменять в консерватории? Это специально. Не фиг колонки местами путать. Нет... Обработчик ошибок в сиквеле плохой, и автономных транзакций тоже нет, Спасибо, жаль что опасения оправдались. Думаю теперь сбацаю sp апдейтить логи. И если XACT_STATE=-1 звать ее через linked server. В остальных случаях - по старому. Жаль, что через ж... Ну чтож поделать ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 18:12 |
|
Простой SELECT инвалидирует транзакцию
|
|||
---|---|---|---|
#18+
Glebanski Но все же, может быть есть ли варианты попроще? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 18:42 |
|
Простой SELECT инвалидирует транзакцию
|
|||
---|---|---|---|
#18+
invm Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Вот конкретно так наверно не сработает, потому что надо будет запросы парсить и каждую колонку обрамлять в cast. Но вообще это навело меня на другую мысль. Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 19:07 |
|
Простой SELECT инвалидирует транзакцию
|
|||
---|---|---|---|
#18+
Glebanski Вот конкретно так наверно не сработает, потому что надо будет запросы парсить и каждую колонку обрамлять в cast. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 19:31 |
|
Простой SELECT инвалидирует транзакцию
|
|||
---|---|---|---|
#18+
Эээ...? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 08:17 |
|
Простой SELECT инвалидирует транзакцию
|
|||
---|---|---|---|
#18+
uaggster, Вариант интересный, но Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Никаких exceptions А сам запрос ессно дает ошибку: Код: sql 1. 2. 3.
В общем я пока склоняюсь к варианту создания двух table variable со всеми полями типа sql_variant. Буду тестить. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 11:51 |
|
|
start [/forum/topic.php?fid=46&msg=39996651&tid=1685678]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 261ms |
total: | 392ms |
0 / 0 |