ПредишенСледващото

Глобалните временни таблици са видими за всички сесии. Глобалните временни таблици се изтриват автоматично, когато сесията приключи. Създайте таблица и престава позовава на нея, всички други задачи. Как мога да се възползвам от глобална временна таблица от друга сесия? Например, един-единствен съхранена процедура създава временна таблица и глобални данни се поберат в тази таблица, както и други лечебни процедури отива в глобалната временна таблица

Обръщаме се към световната временна таблица от друга процедура:

дори Възможно ли е? Ако не, има ли други решения? Или, може би, е възможно да се направи така, че на масата не се изтрива, когато сесията приключи?

настроен 09 Март '16 в 14:37

Глобалните временни таблици се изтриват автоматично в края на сесията, която е създала на масата, и спиране на лечението за тях всички други задачи.

Точно така. ## Ако масата е създадена в една сесия, и е достъпен от други сесии, в които е налице, докато първата сесия не е затворен или на масата ## има обжалване от другите сесии. И важното е, че има лечение в този конкретен момент във времето, а не дали те някога ще след това.

Как работи може да се види в следния пример. Нека създадем две едновременни сесии.

и се оставя на сесията отворена до.

Ние получи данните, които сте попълнили таблицата в Сесия 1, както се очаква. Сега в Сесия 2, издаване:

това ще доведе до заключване ## Т ( "най-прибегне").

Сесия 1 сега е близо, и по-Сесия 2, издаване:

Докато Сесия 1, който е създаден ## маса вече е затворен, първата проба, ще бъде успешен, защото ## тона се включват в контакт сесии 2. След завършване на операцията (COMMIT) в 2 сесии възникне освобождение ## тона. както и сесия инициатор вече е затворен, ## т ще бъдат незабавно отстранени. Следователно втората проба е завършена с грешка.

Как мога да се възползвам от глобална временна таблица от друга сесия?

Тъй като вие правите това, но както можете да видите от примера по-горе, има някои нюанси, отнасящи се до ## маси от жизнения цикъл.

В зависимост от ситуацията, от следните опции:

  • Дръжте сесия, която създаде ## на маса, открит по време на достъп до него от други сесии. Това е може би най-простият и най-малко проблематично опция, освен ако, разбира се, архитектурата на приложението ви позволява да го използвате.
  • ## Можете да създадете таблица в една сесия, а след това още една сесия, за да направи своята хватка, настройка приемлив заключване, след което сесия, която е създадена на масата ##, може да бъде затворена.
  • В някои случаи логиката на приложението може да си позволи да се направи проверка за съществуване / създаване / запълване ## масите във всяка сесия, където е необходимо на. В този случай, кодът за започване може да бъде взето в отделна процедура, и да изпълнява по-необходимостта от всяка такава сесия.
  • Ако по-горните варианти не се побират, а след това може да е знак, че таблиците на ##, която се опитвате да се реши проблема, което наистина трябва да бъде решен с помощта на постоянни таблици.
  • Има и някои алтернативни между ## и постоянни маси - е да се създаде постоянна маса в tempdb (те ще съществува до следващото рестартиране SQLServer). Въпреки това, лично аз мисля, този начин на "мръсни".

Отговорено 10 март '16 в 7:30

Свързани статии

Подкрепете проекта - споделете линка, благодаря!