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

Откуда:
Сообщений: 2639
Hello

Необходимо задекларировать переменную типа Table c учетом ВОЗМОЖНОГО
изменения представления т.е.

 declare @T1 as table(F1 uniqueidentifier,
                               F2 varchar(36)
                              )
  insert into @T1 select * from V1


Если измениться структура V1 -необходимо переписывать код процедур
сответственно надо сказать
 declare @T1 as table(ВОЗЬМИ СТРУКТУРУ 
                               ДАННЫХ ИЗ V1
                              )
  insert into @T1 select * from V1


Как это сделать (в Oraqcle это возможно ....)

Заранее благодарен !
14 окт 13, 12:10    [14965849]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое декларирование структуры  [new]
Glory
Member

Откуда:
Сообщений: 104760
select * into #temptable from V1
14 окт 13, 12:11    [14965866]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое декларирование структуры  [new]
Гость333
Member

Откуда:
Сообщений: 3683
HOME_X
Необходимо задекларировать переменную типа Table

Как это сделать (в Oraqcle это возможно ....)

В оракле есть переменные типа Table? Можете показать пример?
14 окт 13, 12:16    [14965907]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое декларирование структуры  [new]
HOME_X
Member

Откуда:
Сообщений: 2639
Гость333
В оракле есть переменные типа Table? Можете показать пример?


Имел ввиду ссылки на декл. структуры (типа Table - не ведаю....)
14 окт 13, 13:42    [14966683]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое декларирование структуры  [new]
Glory
Member

Откуда:
Сообщений: 104760
HOME_X
Имел ввиду ссылки на декл. структуры

Если вы про курсор, то в MSSQL в курсоре тоже можно ставить *
14 окт 13, 13:44    [14966704]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое декларирование структуры  [new]
HOME_X
Member

Откуда:
Сообщений: 2639
Glory
select * into #temptable from V1


А если код находиться в табл.функции ?
Сообщение 2772, уровень 16, состояние 1, процедура ftTimeSheetNew, строка 20
Cannot access temporary tables from within a function.

Тогда как ?
   ALTER function [ftMyFunc](@Dbeg Date..............)
as
begin
  select * into #T1 from V1;
  insert into @Make
  .................
  ...............

И вопрос ДВА - можно ли материализовать представление V1 непосредственно в теле основного запроса ?

[SRC PLSQL]
select *
   from T_MAIN A
    left join V1  B (- выполняем без учета ограничений таблицы A и сливаем в память)
      on (V1.F1=A.F1)


Так можно сделать ?
14 окт 13, 13:50    [14966765]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое декларирование структуры  [new]
Glory
Member

Откуда:
Сообщений: 104760
HOME_X
А если код находиться в табл.функции ?

А если бы он вез патроны ?
Зачем функция, если у вас уже есть view ?
14 окт 13, 13:53    [14966798]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое декларирование структуры  [new]
HOME_X
Member

Откуда:
Сообщений: 2639
Glory
HOME_X
А если код находиться в табл.функции ?

А если бы он вез патроны ?
Зачем функция, если у вас уже есть view ?


Поясню
если делаю ссылку в основном запросе на представление V1
работает достаточно долго

Как только сделал выгрузку V1 в переменную T1 и сделал ссылку из основного
запроса на T1 -работает моментально

Отсюда возник вопрсо ДВА - как МАТЕРИАЛИЗОВАТЬ представление (без переменной памяти)

Спасибо !
14 окт 13, 14:13    [14966982]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое декларирование структуры  [new]
Glory
Member

Откуда:
Сообщений: 104760
HOME_X
Как только сделал выгрузку V1 в переменную T1 и сделал ссылку из основного
запроса на T1 -работает моментально

Что вам мешает сделать выгрузку во временную таблицу ?

HOME_X
Отсюда возник вопрсо ДВА - как МАТЕРИАЛИЗОВАТЬ представление (без переменной памяти)

Что вам мешает разоборать план выполнения и узнать причину такого быстродействия ?
14 окт 13, 14:15    [14966993]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое декларирование структуры  [new]
HOME_X
Member

Откуда:
Сообщений: 2639
Glory
Что вам мешает сделать выгрузку во временную таблицу ?

Это уже сделано !
Динамическая структура - основной вопрос этой темы
Как задекл. переменную ссылаясь на представление (с возможным изменением структуры представления)


HOME_X
Что вам мешает разоборать план выполнения и узнать причину такого быстродействия ?

Ссылка на данное представление - реально оно представляет собой рекурсивный запрос.
Отсюда тормоз ...

И вопрос ДВА ....можно ли материализовать и обособить выполнение !
14 окт 13, 14:21    [14967042]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое декларирование структуры  [new]
Glory
Member

Откуда:
Сообщений: 104760
HOME_X
Как задекл. переменную ссылаясь на представление (с возможным изменением структуры представления)

Никак.

HOME_X
И вопрос ДВА ....можно ли материализовать и обособить выполнение !

Материализовать в понятиях Оракла - нельзя
14 окт 13, 14:23    [14967053]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое декларирование структуры  [new]
HOME_X
Member

Откуда:
Сообщений: 2639
Glory
Никак.

Принято - спасибо !

Glory
Материализовать в понятиях Оракла - нельзя


Может не материализовать,
А сказать следующее - "База выполни представление, а потом делай связь с основным запросом "

Так можно ? уточните пожалуйста
14 окт 13, 14:28    [14967101]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое декларирование структуры  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
HOME_X
А сказать следующее - "База выполни представление, а потом делай связь с основным запросом "
В MS SQL материализация (индексированных представления) делаются не апосля (на коммите), а всегда сразу же.
Словно это индекс на самой табле(ах) висит. Хотя почему "словно", так и есть :)

HOME_X
делаю ссылку в основном запросе на представление
О боже. Императивное мышление детектед ...
Нет никаких ссылок. НЕТУ.

Представление тормозит потому что надо руки прямые иметь. Естественно что большинству оракловцам это не нравится - они привыкли не думать.

В 99% случаев проблема в том что запрос написан левой пяткой. Проще надо быть и не разводить грязи и сервер будет летать.
Поймите, MS SQL сразу ставит палки в колёса всем тем которые пишут не в зуб ногой.
И я считаю это его самым главным приемуществом.

Не откладывайте неизбежное, пишите сразу правильно.
15 окт 13, 15:15    [14973590]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое декларирование структуры  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Упс, не так понял.
HOME_X
"База выполни представление, а потом делай связь с основным запросом "
Опять императивизм детектед.

Нет, нет никаких сначала и потом. Запрос, представление, параметризованные представления - это тупо текст.
В итоге все запросы разворачиваются в один сплошной запрос.
15 окт 13, 15:18    [14973616]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое декларирование структуры  [new]
HOME_X
Member

Откуда:
Сообщений: 2639
Mnior
один сплошной запрос.


Именно это в моем случае и не нужно
- необходимо сначала полностью выполнить код представления и сделать кеш записей (там рекурс. запрос)
- потом вязаться на основные таблицы

Этот процесс достигаеться путем добавления hint-a MERGE
 select *
   from Main_Table A
   left MERGE join View_Recurs B
     on (B.F1=A.F1)


Эффект дистигнут !
Всем спасибо за участие
15 окт 13, 22:04    [14975966]     Ответить | Цитировать Сообщить модератору
 Re: Динамическое декларирование структуры  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
HOME_X
Эффект дистигнут!
Только вот интерпретация результата немного неверная.
Нет там такого "сначала полностью выполнить код представления".
Просто поменялся план на подходящий вам по скорости (не значит оптимальный).
Но если перезаписать запрос нормально, то и хинтов не надо будет. Хотя возможно ошибка в структуре БД.
16 окт 13, 15:21    [14980698]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить