powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Имя БД в VIEW при Union
18 сообщений из 18, страница 1 из 1
Имя БД в VIEW при Union
    #39779348
LightN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Подскажите есть ли такая возможность, чтобы при создании БД в новом 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
Имя БД в VIEW при Union
    #39779355
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
через синонимы не пробовали?
...
Рейтинг: 0 / 0
Имя БД в VIEW при Union
    #39779359
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneчерез синонимы не пробовали?
ну будет drop + create synonym
...
Рейтинг: 0 / 0
Имя БД в VIEW при Union
    #39779362
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так может это легче ТС будет
...
Рейтинг: 0 / 0
Имя БД в VIEW при Union
    #39779364
LightN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,
А перескок синонима на год вверх? Тоже процедура?
...
Рейтинг: 0 / 0
Имя БД в VIEW при Union
    #39779365
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хоть скриптом в джобе, хоть вызовом ХП. это вам решать
...
Рейтинг: 0 / 0
Имя БД в VIEW при Union
    #39779367
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Имя БД в VIEW при Union
    #39779369
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LightN,

но правильней, имхо, сделать регламент раз в год который сгенерирует новые объекты и новое представление
...
Рейтинг: 0 / 0
Имя БД в VIEW при Union
    #39779385
LightN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Имя БД в VIEW при Union
    #39779387
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Имя БД в VIEW при Union
    #39779393
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Имя БД в VIEW при Union
    #39779410
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Имя БД в VIEW при Union
    #39779413
LightN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,
Ну, да, а YEAR(GETDATE()) - 6 <= 2017 не прокатит если зайти в DB_2017, например ...
...
Рейтинг: 0 / 0
Имя БД в VIEW при Union
    #39779416
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как перестать смеятся и начать работать....

Код: 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
Имя БД в VIEW при Union
    #39779423
LightN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Имя БД в VIEW при Union
    #39779606
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LightNaleks222 2. Можно - сделайте N баз с фиксированными именами и циклически заменяйте самую старую. Год можно и в базе хранить. Согласен полностью с п.2, эту бы идею поиметь лет так 18 тому назад ... С нуля так, конечно, бы и сделал.Это ведь тоже ручные действия; непонятно, чем тогда не нравится автоматическое изменение вьюхи в джобе.
...
Рейтинг: 0 / 0
Имя БД в VIEW при Union
    #39779674
LightN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,
Да, тоже ручные.
Идеальный вариант - найти способ получить VIEW-код ОДИНАКОВЫЙ ДЛЯ ВСЕХ БД и ничего не менять и не править. Если попросили, например, добавить во VIEW какое-нибудь поле, то мы добавляем его во VIEW последнего года, и тот же самый код в БД других лет, просто меняя USE. Т.о. если код VIEW стоит в DB_2018, то он смотрит в DB_2017 ... , а если его же поставить в DB_2017 то он уже смотрит в DB_2016 ... и т.д. соответственно.
В моем проекте таких VIEW, которые смотрят на предыдущий год, на предыдущие 2 года, ... 6 лет > 100 штук :(
Ну если ничего нельзя придумать хитрого, тогда только остается "изменение вьюхи в джобе" и "сделать регламент раз в год" и каждый раз когда потребуются изменения в течении года.

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


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