Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Имя БД в VIEW при Union / 18 сообщений из 18, страница 1 из 1
26.02.2019, 15:02
    #39779348
LightN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя БД в VIEW при Union
Добрый день!
Подскажите есть ли такая возможность, чтобы при создании БД в новом 2020 году VIEW [dbo].[Seriynik_last6Year] перескочила бы сама автоматом на 20,19,18,17,16,15 соответственно? Сейчас я это делаю через процедуру, которая меняет скрипт и далее ALTER VIEW. Возможно ли вообще обойтись без ALTER VIEW?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
ALTER VIEW [dbo].[Seriynik_last6Year]
AS
SELECT * from dbo.Seriynik with (NOLOCK)
union all
SELECT * from DB_2018.dbo.Seriynik with (NOLOCK) 
union all
SELECT * from DB_2017.dbo.Seriynik with (NOLOCK) 
union all
SELECT * from DB_2016.dbo.Seriynik with (NOLOCK)
union all
SELECT * from DB_2015.dbo.Seriynik with (NOLOCK)
union all
SELECT * from DB_2014.dbo.Seriynik with (NOLOCK)
--[dbo].[Seriynik_last6Year] в DB_2019
...
Рейтинг: 0 / 0
26.02.2019, 15:09
    #39779355
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя БД в VIEW при Union
через синонимы не пробовали?
...
Рейтинг: 0 / 0
26.02.2019, 15:14
    #39779359
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя БД в VIEW при Union
Konst_Oneчерез синонимы не пробовали?
ну будет drop + create synonym
...
Рейтинг: 0 / 0
26.02.2019, 15:17
    #39779362
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя БД в VIEW при Union
так может это легче ТС будет
...
Рейтинг: 0 / 0
26.02.2019, 15:19
    #39779364
LightN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя БД в VIEW при Union
Konst_One,
А перескок синонима на год вверх? Тоже процедура?
...
Рейтинг: 0 / 0
26.02.2019, 15:21
    #39779365
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя БД в VIEW при Union
хоть скриптом в джобе, хоть вызовом ХП. это вам решать
...
Рейтинг: 0 / 0
26.02.2019, 15:22
    #39779367
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя БД в VIEW при Union
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SELECT * from dbo.Seriynik with (NOLOCK)
SELECT * from DB_2018.dbo.Seriynik with (NOLOCK) 
WHERE YEAR(GETDATE()) - 6 <= 2018
union all
SELECT * from DB_2017.dbo.Seriynik with (NOLOCK) 
WHERE YEAR(GETDATE()) - 6 <= 2017
union all
SELECT * from DB_2016.dbo.Seriynik with (NOLOCK)
WHERE YEAR(GETDATE()) - 6 <= 2016
union all
SELECT * from DB_2015.dbo.Seriynik with (NOLOCK)
WHERE YEAR(GETDATE()) - 6 <= 2015
union all
SELECT * from DB_2014.dbo.Seriynik with (NOLOCK)
WHERE YEAR(GETDATE()) - 6 <= 2014


можно как-то так если все базы и объекты уже есть "вперёд"
...
Рейтинг: 0 / 0
26.02.2019, 15:23
    #39779369
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя БД в VIEW при Union
LightN,

но правильней, имхо, сделать регламент раз в год который сгенерирует новые объекты и новое представление
...
Рейтинг: 0 / 0
26.02.2019, 15:45
    #39779385
LightN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя БД в VIEW при Union
TaPaK,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SELECT * from dbo.Seriynik with (NOLOCK)
union all
SELECT * from DB_2018.dbo.Seriynik with (NOLOCK) 
WHERE right(db_name(),4)-6 <= 2018
union all
SELECT * from DB_2017.dbo.Seriynik with (NOLOCK) 
WHERE right(db_name(),4)-6 <= 2017
union all
SELECT * from DB_2016.dbo.Seriynik with (NOLOCK)
WHERE right(db_name(),4)-6 <= 2016
union all
SELECT * from DB_2015.dbo.Seriynik with (NOLOCK)
WHERE right(db_name(),4)-6 <= 2015
union all
SELECT * from DB_2014.dbo.Seriynik with (NOLOCK)
WHERE right(db_name(),4)-6 <= 2014


... так м.б. ...
...
Рейтинг: 0 / 0
26.02.2019, 15:49
    #39779387
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя БД в VIEW при Union
LightNTaPaK,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SELECT * from dbo.Seriynik with (NOLOCK)
union all
SELECT * from DB_2018.dbo.Seriynik with (NOLOCK) 
WHERE right(db_name(),4)-6 <= 2018
union all
SELECT * from DB_2017.dbo.Seriynik with (NOLOCK) 
WHERE right(db_name(),4)-6 <= 2017
union all
SELECT * from DB_2016.dbo.Seriynik with (NOLOCK)
WHERE right(db_name(),4)-6 <= 2016
union all
SELECT * from DB_2015.dbo.Seriynik with (NOLOCK)
WHERE right(db_name(),4)-6 <= 2015
union all
SELECT * from DB_2014.dbo.Seriynik with (NOLOCK)
WHERE right(db_name(),4)-6 <= 2014


... так м.б. ...



добить еще штук 5 запросов на будущие 5 лет, создав пустые вью, потом менять.
...
Рейтинг: 0 / 0
26.02.2019, 15:52
    #39779393
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя БД в VIEW при Union
LightNTaPaK,
Код: sql
1.
2.
3.
4.
5.
SELECT * from dbo.Seriynik with (NOLOCK)
union all
SELECT * from DB_2018.dbo.Seriynik with (NOLOCK) 
WHERE right(db_name(),4)-6 <= 2018
....


... так м.б. ...

Феерично...
...
Рейтинг: 0 / 0
26.02.2019, 16:20
    #39779410
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя БД в VIEW при Union
LightN Возможно ли вообще обойтись без ALTER VIEW?
1. Можно - не делайте дохера баз - делайте одну.
2. Можно - сделайте N баз с фиксированными именами и циклически заменяйте самую старую. Год можно и в базе хранить.

3. Надо вам зачесть документацию о "partitioned views"
https://docs.microsoft.com/en-us/sql/t-sql/statements/create-view-transact-sql?view=sql-server-2017#partitioned-views
...
Рейтинг: 0 / 0
26.02.2019, 16:24
    #39779413
LightN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя БД в VIEW при Union
TaPaK,
Ну, да, а YEAR(GETDATE()) - 6 <= 2017 не прокатит если зайти в DB_2017, например ...
...
Рейтинг: 0 / 0
26.02.2019, 16:27
    #39779416
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя БД в VIEW при Union
как перестать смеятся и начать работать....

Код: sql
1.
2.
3.
SELECT * from dbo.Seriynik with (NOLOCK)
union all
SELECT * from DB_2018.dbo.Seriynik with (NOLOCK) 



LightNTaPaK,
Ну, да, а YEAR(GETDATE()) - 6 <= 2017 не прокатит если зайти в DB_2017, например ...
...
Рейтинг: 0 / 0
26.02.2019, 16:36
    #39779423
LightN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя БД в VIEW при Union
aleks222LightN Возможно ли вообще обойтись без ALTER VIEW?
1. Можно - не делайте дохера баз - делайте одну.
2. Можно - сделайте N баз с фиксированными именами и циклически заменяйте самую старую. Год можно и в базе хранить.
3. Надо вам зачесть документацию о "partitioned views"
https://docs.microsoft.com/en-us/sql/t-sql/statements/create-view-transact-sql?view=sql-server-2017#partitioned-views Согласен полностью с п.2, эту бы идею поиметь лет так 18 тому назад ... С нуля так, конечно, бы и сделал.
А год, храню в БД: right(db_name(),4) = fYearBD(), где fYearBD() обращение к полю с годом.
...
Рейтинг: 0 / 0
27.02.2019, 09:27
    #39779606
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя БД в VIEW при Union
LightNaleks222 2. Можно - сделайте N баз с фиксированными именами и циклически заменяйте самую старую. Год можно и в базе хранить. Согласен полностью с п.2, эту бы идею поиметь лет так 18 тому назад ... С нуля так, конечно, бы и сделал.Это ведь тоже ручные действия; непонятно, чем тогда не нравится автоматическое изменение вьюхи в джобе.
...
Рейтинг: 0 / 0
27.02.2019, 11:48
    #39779674
LightN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя БД в VIEW при Union
alexeyvg,
Да, тоже ручные.
Идеальный вариант - найти способ получить VIEW-код ОДИНАКОВЫЙ ДЛЯ ВСЕХ БД и ничего не менять и не править. Если попросили, например, добавить во VIEW какое-нибудь поле, то мы добавляем его во VIEW последнего года, и тот же самый код в БД других лет, просто меняя USE. Т.о. если код VIEW стоит в DB_2018, то он смотрит в DB_2017 ... , а если его же поставить в DB_2017 то он уже смотрит в DB_2016 ... и т.д. соответственно.
В моем проекте таких VIEW, которые смотрят на предыдущий год, на предыдущие 2 года, ... 6 лет > 100 штук :(
Ну если ничего нельзя придумать хитрого, тогда только остается "изменение вьюхи в джобе" и "сделать регламент раз в год" и каждый раз когда потребуются изменения в течении года.

Всем спасибо.
...
Рейтинг: 0 / 0
27.02.2019, 13:17
    #39779758
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Имя БД в VIEW при Union
Создайте database trigger на базе model на событие создания таблицы, в которой храните годовые данные. В этом триггере выполните динамический запрос по изменению представления, которое хранится в общей базе. При создании в новой базе новой таблицы для очередных годовых наборов автоматически будет внесено исправление представления.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Имя БД в VIEW при Union / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]