AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
DAX
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.04.2015, 14:24   #1  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Коннекшен для TempDB неважен

Недавно приводили пример, как может заполняться таблица на самом SQL-сервере в хранимой процедуре

Для доступа к этой таблице достаточно передать ее имя (уникальное для сессии)
__________________
Axapta v.3.0 sp5 kr2
Старый 20.04.2015, 14:43   #2  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,658 / 1162 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от AndyD Посмотреть сообщение
Коннекшен для TempDB неважен
Это как? Другой пользователь/сеанс может увидеть "мои" временные данные?

Цитата:
Сообщение от AndyD Посмотреть сообщение
Недавно приводили пример, как может заполняться таблица на самом SQL-сервере в хранимой процедуре

Для доступа к этой таблице достаточно передать ее имя (уникальное для сессии)
Это все будет работать только в том случае, если сессия не переключилась на другое соединение. В смысле, и ХП SQL-сервера и дальнейшее обращение к временной таблице выполнялось в рамках одного соединения к серверу. Пусть даже эти обращения были в разных классах, но соединение должно быть одно и то же!

На практике, гарантировать "не переключение" соединения на уровне Axapta можно только путем прямого контроля за объектом Connection. Все остальное - это "как повезет". Может получиться, а может и нет...

Тот факт, что, как правило, Axapta "держит" текущее соединение до окончания обработки, как раз и относится к таким "везениям". Некое действие по умолчанию, которое программист контролировать не может. Поэтому строить на этом какие-то далеко идущие выводы - не стоит.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 20.04.2015, 14:52   #3  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Это как? Другой пользователь/сеанс может увидеть "мои" временные данные?
Совершенно верно
Одно условие - он должен знать имя таблицы (не аксаптовское, а физическое, что-нибудь типа такого [tempdb].[dbo].[t100005_E51B88936E814961BE9EFF89CE81E8D4]).

Насчет сессии, повторюсь, совершенно неважно
Я в Менеджмент студии руками заполнял значения таблицы, которая отображалась в интерфейсе аксапты

Насчет "удержания соединения" - это уже задача программиста, что бы оно удерживалось на время работы стороннего средства)
__________________
Axapta v.3.0 sp5 kr2
Старый 20.04.2015, 17:08   #4  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Цитата:
Сообщение от AndyD
Не смешивайте, пожалуйста)

Для InMemory и в 2012 нельзя
Не смешиваю Я четко написал "если таблица TempDB то...".

Цитата:
Сообщение от AndyD Посмотреть сообщение
Одно условие - он должен знать имя таблицы (не аксаптовское, а физическое, что-нибудь типа такого [tempdb].[dbo].[t100005_E51B88936E814961BE9EFF89CE81E8D4]).
Вот именно поэтому передать значение в Thread очень даже возможно - передавайте название таблици и уже делаете что хотите с ней внутри Thread.

X++:
TmpTable tmpTable;

//fill tmpTable

thread = new Thread();
    thread.setInputParm([tmpTable.getPhysicalTableName()]);
    thread.removeOnComplete(true);
    thread.run(classnum(MyClass), staticmethodstr(MyClass, runThread));
    thread.waitUntilSignaled();
    
// tmpTable после работы Thread
tmpTable будет удалена автоматом как выйдите за рамки метода.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 20.04.2015, 20:24   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,658 / 1162 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от AndyD Посмотреть сообщение
имя таблицы (не аксаптовское, а физическое, что-нибудь типа такого [tempdb].[dbo].[t100005_E51B88936E814961BE9EFF89CE81E8D4]).
Я так понимаю, это "фишка" Ax2012 и в Ax2009 не применима?

Тот факт, что у имени таблицы отсутствует ведущий символ "#", идентифицирующий именно временную таблицу в терминах MS SQL - это особенности "перевода" (пример) или действительно таблица создается в узле Table, а не в узле "Temporary Tables" базы данных tempdb? В смысле, если смотреть через MS SQL Server Management Studio.

Т.е. с точки зрения MS SQL - это именно временная таблица, живущая только в текущем соединении, или постоянная таблица просто созданная в базе tempdb?
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 20.04.2015, 21:54   #6  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Я так понимаю, это "фишка" Ax2012 и в Ax2009 не применима?
Да, только для 2012-й
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Тот факт, что у имени таблицы отсутствует ведущий символ "#", идентифицирующий именно временную таблицу в терминах MS SQL - это особенности "перевода" (пример) или действительно таблица создается в узле Table, а не в узле "Temporary Tables" базы данных tempdb? В смысле, если смотреть через MS SQL Server Management Studio.

Т.е. с точки зрения MS SQL - это именно временная таблица, живущая только в текущем соединении, или постоянная таблица просто созданная в базе tempdb?
В tempdb все таблицы временные)
Поскольку, при перестарте сиквела он целиком и полностью пересоздается

Таблица создается в узле Table - это не "перевод", а пример реальной таблицы
__________________
Axapta v.3.0 sp5 kr2
Старый 21.04.2015, 11:01   #7  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,658 / 1162 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от AndyD Посмотреть сообщение
Таблица создается в узле Table - это не "перевод", а пример реальной таблицы
Понятно. MS в очередной раз "вырвало поражение из рук победы" Теперь и из базы TempDB сделали одну большую помойку, по аналогии с "временными" файлами в директории C:\Windows\Temp
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Теги
ax2009, thread, временная таблица

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Временные таблицы и их временные файлы AraraT® DAX: Прочие вопросы 6 12.04.2010 00:39
Временные таблицы в отчете Прокопьева DAX: Программирование 25 02.10.2006 14:54
Не страшно ли временные таблицы временно сделать постоянными? Gustav DAX: Программирование 11 09.02.2006 11:04
Временные таблицы в отчетах konfet DAX: Программирование 5 19.01.2005 11:32
Временные таблицы vasiliy DAX: Программирование 6 09.11.2004 11:04

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:06.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.