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

Откуда: kart.vrostove.net
Сообщений: 14957
Есть 2008 SQL сервер, экспресс. Есть несколько баз с одинаковыми по структуре таблицами. В таблицах есть индексы.
Есть вьюха, которая позволяет делать селекты сразу из всех баз, типа такой:
CREATE VIEW [dbo].[clog]
AS
SELECT     *
FROM         store2012.dbo.plog
UNION ALL
SELECT     *
FROM         store2013.dbo.plog
GO

Индексы в такой схеме не работают. Индексировать такую вьюху нельзя, ибо несколько баз. Поискал возможность указать явно необходимость использовать индексы в такой ситуации, не нашел.
Хочу сделать условную выборку данных, так чтоб при определенном диапазоне дат выполнялся явный селект из таблицы известной базы. В обычной инлайн-функции нельзя использовать условия. В многооператорной инлайн-функции создается временная таблица, я хотел бы этого избежать, ибо данных запрашиваться может много.
Что делать?
1 сен 16, 12:01    [19616538]     Ответить | Цитировать Сообщить модератору
 Re: По инлайн функции подскажите, пожалуйста.  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
ALTER VIEW [dbo].[clog]
AS
    SELECT filter = 2012
    FROM store2012.dbo.plog
    UNION ALL
    SELECT *, 2013
    FROM store2013.dbo.plog
GO

SELECT *
FROM dbo.clog
WHERE filter = 2012
1 сен 16, 12:06    [19616574]     Ответить | Цитировать Сообщить модератору
 Re: По инлайн функции подскажите, пожалуйста.  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
SELECT *, filter = 2012
1 сен 16, 12:07    [19616576]     Ответить | Цитировать Сообщить модератору
 Re: По инлайн функции подскажите, пожалуйста.  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
https://technet.microsoft.com/ru-ru/library/ms190019(v=sql.105).aspx
1 сен 16, 12:08    [19616585]     Ответить | Цитировать Сообщить модератору
 Re: По инлайн функции подскажите, пожалуйста.  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 14957
Спасибо.
1 сен 16, 13:13    [19616938]     Ответить | Цитировать Сообщить модератору
 Re: По инлайн функции подскажите, пожалуйста.  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 14957
AlanDenton,

Надо ведь еще во что-то "обернуть"
SELECT *
FROM dbo.clog
WHERE filter = 2012

чтобы не использовать его во всех хранимках и запросах.
1 сен 16, 13:29    [19617054]     Ответить | Цитировать Сообщить модератору
 Re: По инлайн функции подскажите, пожалуйста.  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 14957
invm,

Получается, если я добавлю CHECK во все таблицы (например дата должна быть только определенного диапазона), то индексы заработают?
1 сен 16, 13:31    [19617071]     Ответить | Цитировать Сообщить модератору
 Re: По инлайн функции подскажите, пожалуйста.  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Flying-home
Надо ведь еще во что-то "обернуть"

Что куда обернуть? Вы жаловались что сиквел вычитывает все из таблиц. Добавьте чек-констрейнт либо во вьюхе константы и фильтруйте.
1 сен 16, 13:36    [19617102]     Ответить | Цитировать Сообщить модератору
 Re: По инлайн функции подскажите, пожалуйста.  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 14957
AlanDenton
Flying-home
Надо ведь еще во что-то "обернуть"

Что куда обернуть? Вы жаловались что сиквел вычитывает все из таблиц. Добавьте чек-констрейнт либо во вьюхе константы и фильтруйте.

Ну, чтоб во всех запросах к этой вьюхе не писать условие
WHERE filter = 2012
Его же вычислять еще каждый раз надо...
1 сен 16, 13:44    [19617168]     Ответить | Цитировать Сообщить модератору
 Re: По инлайн функции подскажите, пожалуйста.  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
автор
Хочу сделать условную выборку данных, так чтоб при определенном диапазоне дат выполнялся явный селект из таблицы известной базы.

И...? То что Вам привели не подходит под решение первоначальной проблемы? Если Вам нужен фильтр так напишите его корректно, SQL Server не сможет угадать за Вас что вы хотели запросом получить.
1 сен 16, 13:48    [19617196]     Ответить | Цитировать Сообщить модератору
 Re: По инлайн функции подскажите, пожалуйста.  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 14957
AlanDenton
автор
Хочу сделать условную выборку данных, так чтоб при определенном диапазоне дат выполнялся явный селект из таблицы известной базы.

И...? То что Вам привели не подходит под решение первоначальной проблемы? Если Вам нужен фильтр так напишите его корректно, SQL Server не сможет угадать за Вас что вы хотели запросом получить.

В таком случае и вьюха-то не нужна особо, правильно? Просто в зависимости от диапазона дат делаешь селект из нужных таблиц...
1 сен 16, 14:57    [19617701]     Ответить | Цитировать Сообщить модератору
 Re: По инлайн функции подскажите, пожалуйста.  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Вьюха это всего лишь абстракция. Если Ваша логика позволяет напрямую к таблицам обращаться, то почему не делать этого. Посмотрите с сторону синонимов.
1 сен 16, 15:29    [19617857]     Ответить | Цитировать Сообщить модератору
 Re: По инлайн функции подскажите, пожалуйста.  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Секционированное представление удобно ещё и тем, что в него можно вставлять данные, как в простую таблицу.
А они будут автоматически сохраняться в своих секциях согласно CHECK констрейнтам.
То есть, работа с таким представлением упрощается до безобразия!
1 сен 16, 16:38    [19618238]     Ответить | Цитировать Сообщить модератору
 Re: По инлайн функции подскажите, пожалуйста.  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 14957
AlanDenton
Вьюха это всего лишь абстракция. Если Ваша логика позволяет напрямую к таблицам обращаться, то почему не делать этого. Посмотрите с сторону синонимов.

Эта абстракция очень мне помогает, упрощает код. Я пишу селект из вьюхи и не задумываюсь о том, что на самом деле она представляет кучу таблиц.
Теперь бы индексы заставить работать...
Подумал, что я просто напишу скалярную функцию, которая будет принимать две даты и возвращать предложенный вами filter. Но тут надо следить за...
Не, надо табличную функцию писать. Будет возвращать набор фильтров. И "обернуть" все это в еще одну табличную функцию.
О!
1 сен 16, 16:42    [19618253]     Ответить | Цитировать Сообщить модератору
 Re: По инлайн функции подскажите, пожалуйста.  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 14957
iap
Секционированное представление удобно ещё и тем, что в него можно вставлять данные, как в простую таблицу.
А они будут автоматически сохраняться в своих секциях согласно CHECK констрейнтам.
То есть, работа с таким представлением упрощается до безобразия!

Насколько я помню, в моем случае вставка работать не будет. Там куча ограничений наваливается, когда таблицы в разных базах.
1 сен 16, 16:44    [19618261]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить