Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ищу удобный способ менять имя базы в TSQL коде / 18 сообщений из 18, страница 1 из 1
09.04.2018, 14:03
    #39627526
KellyLynch
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу удобный способ менять имя базы в TSQL коде
У меня есть некий код, размещённый в нескольких процедурах некоей базы.
Этот код часто ссылается на другую базу [TheOtherBase]:

Код: sql
1.
Select * FROM [TheOtherBase].[dbo].[TableName1] 



И тд.

Через некоторое время, возможно, базу [TheOtherBase] переименуют – ей дадут новое имя, например [TheOtherBaseNewName].

Как мне “легко и быстро” перестроить вышеупомянутый код, чтобы он стал работать с [TheOtherBaseNewName] вместо [TheOtherBase]?

Сразу скажу что код ссылается на много разных таблиц из [TheOtherBase] – их штук 20.

Можно вопрос сфомулировать и по другому - "ищу удобный способ так организовать мой код, чтобы потом легко и быстро менять имя базы [TheOtherBase] на [TheOtherBaseNewName]"
...
Рейтинг: 0 / 0
09.04.2018, 14:07
    #39627529
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу удобный способ менять имя базы в TSQL коде
динамический sql
...
Рейтинг: 0 / 0
09.04.2018, 14:09
    #39627530
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу удобный способ менять имя базы в TSQL коде
KellyLynch,

можно использовать синонимы
...
Рейтинг: 0 / 0
09.04.2018, 14:10
    #39627532
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу удобный способ менять имя базы в TSQL коде
для самой базы не получится
...
Рейтинг: 0 / 0
09.04.2018, 14:15
    #39627539
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу удобный способ менять имя базы в TSQL коде
Konst_Oneдля самой базы не получится
понятное дело, но синонимы для объектов можно просто пересоздать с другим именем базы, когда понадобится
...
Рейтинг: 0 / 0
09.04.2018, 14:19
    #39627543
KellyLynch
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу удобный способ менять имя базы в TSQL коде
Shakill,

никогда раньше не пользовался....Вы про это: - https://docs.microsoft.com/en-us/sql/t-sql/statements/create-synonym-transact-sql

?
...
Рейтинг: 0 / 0
09.04.2018, 14:21
    #39627544
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу удобный способ менять имя базы в TSQL коде
KellyLynchShakill,
никогда раньше не пользовался....Вы про это: - https://docs.microsoft.com/en-us/sql/t-sql/statements/create-synonym-transact-sql
?
да, про это
создаете синонимы на объекты другой базы и в коде обращаетесь к этим объектам уже через синонимы
...
Рейтинг: 0 / 0
09.04.2018, 15:27
    #39627568
Гигабайт Мегабайтович Килобайтов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу удобный способ менять имя базы в TSQL коде
либо через линкованный сервер.
ПЫСЫ а вы уверены что базы "не уедут" с сервера? ))
...
Рейтинг: 0 / 0
09.04.2018, 15:36
    #39627572
KellyLynch
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу удобный способ менять имя базы в TSQL коде
Гигабайт Мегабайтович Килобайтовлибо через линкованный сервер.
ПЫСЫ а вы уверены что базы "не уедут" с сервера? ))

"либо через линкованный сервер." - никогда не слышал раньше.
Оно? - https://docs.microsoft.com/en-us/sql/relational-databases/linked-servers/linked-servers-database-engine
...
Рейтинг: 0 / 0
09.04.2018, 16:30
    #39627609
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу удобный способ менять имя базы в TSQL коде
KellyLynch,

linked server будет подключаться через "наружу".
...
Рейтинг: 0 / 0
09.04.2018, 17:29
    #39627630
blonduser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу удобный способ менять имя базы в TSQL коде
KellyLynch,

USE [TheOtherBaseNewName]
...
Рейтинг: 0 / 0
09.04.2018, 20:44
    #39627668
KellyLynch
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу удобный способ менять имя базы в TSQL коде
blonduserKellyLynch,

USE [TheOtherBaseNewName]

"USE [TheOtherBaseNewName]" помогло бы если б весь мой код был собран в один большой файл.
Но как я говорил, он "разбросан" по многим процедурам.

Согласен - это решение даст "определённый выигрыш" по сравнению с исходным кодом, где в каждой из процедур есть несколько конструкций "Select * FROM [ TheOtherBase ].[dbo].[TableName1]"
...
Рейтинг: 0 / 0
09.04.2018, 22:45
    #39627691
blonduser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу удобный способ менять имя базы в TSQL коде
KellyLynchblonduserKellyLynch,

USE [TheOtherBaseNewName]

"USE [TheOtherBaseNewName]" помогло бы если б весь мой код был собран в один большой файл.
Но как я говорил, он "разбросан" по многим процедурам.

Согласен - это решение даст "определённый выигрыш" по сравнению с исходным кодом, где в каждой из процедур есть несколько конструкций "Select * FROM [ TheOtherBase ].[dbo].[TableName1]"

Создаешь подключение к серверу.
Вызываешь USE [TheOtherBaseNewName].
И пока подключение активно все процедуры обращаются к указанной БД.
...
Рейтинг: 0 / 0
11.04.2018, 19:16
    #39628704
Glebanski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу удобный способ менять имя базы в TSQL коде
Может поможет
http://www.sommarskog.se/dynamic_sql.html Get Data from another Database
If you for some reason have your application spread over two databases, what you absolutely not should do is to have code that says:

SELECT ... FROM otherdb.dbo.tbl JOIN ...
This is bad, because if someone asks for a second environment on the same server, you have a lot of code to change.

The best solution for this particular problem is to use synonyms, added in SQL 2005:

CREATE SYNONYM otherdbtbl FOR otherdb.dbo.tbl
You can then refer to otherdb.dbo.tbl as just otherdbtbl. If there is a need for a second set of databases, you only have to update the synonyms, and there is no need to use dynamic SQL.

Yet a way to avoid dynamic SQL is to use stored procedures for all inter-database communication. That is, if you are in db1 and need to get data from db2, you call a stored procedure in db2. This can be dynamic, because EXEC permits you to specify a variable that holds the name of the procedure to execute.

SELECT @dbname = quotename(dbname) FROM ...
SELECT @sp = @dbname + '..some_sp'
EXEC @ret = @sp @par1, @par2...
If you want to get result sets back from db2, look at my article How to Share Data between Stored Procedures for suggestions.

There may still be cases you may find that dynamic SQL is the only feasible situation. This can be done in two ways. The most obvious is:

SELECT @dbname = quotename(dbname) FROM ...
SELECT @sql = ' SELECT ... FROM ' + @dbname + ' .dbo.otherdbtbl ' +
' JOIN dbo.localtbl ... '
EXEC sp_executesql @sql, @params, ...
But, if the query is complex, and most of the tables are in the remote database you can also do:

SELECT @sql = ' SELECT ... FROM dbo.othertbl ' +
' JOIN ' + quotename(db_name()) + '.dbo.localtbl ... '
SELECT @dbname = quotename(dbname) FROM ...
SELECT @sp_executesql = @dbname + '..sp_executesql'
EXEC @sp_executesql @sql, @params, ...
As above, I make use of that you can specify the procedure name dynamically with EXEC. The trick here is that when you specify a system stored procedure in three-part notation with the database name, the procedure executes in the context of that database. Thus, the dynamic SQL in this example runs in @dbname, not the current database.
...
Рейтинг: 0 / 0
09.05.2018, 10:29
    #39642282
Сруль.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу удобный способ менять имя базы в TSQL коде
По бандитски.
Мне пришлось переживать похожий момент.
Идея не моя-босса, я её только озвучил в SQL.
Cоздаётся Вью(View) с именем таблицы TableName1 в своей родной базе.
Вью идёт туда, куда ему надо-в чужую базу. Если начнутся тормоза,
можо обратиться к табличной функции-то же самое Вью, только
с параметром. Приставка с именем базы из всех процедур выбивается.
Когда начнутся завалы-меняете только Вью. Это легче.
...
Рейтинг: 0 / 0
09.05.2018, 10:47
    #39642285
Сруль.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу удобный способ менять имя базы в TSQL коде
А чтобы мне осталось время на ЮТУБ.
Босс-душа человек, подкинул скрипт,
как шукать объекты, зависимые от чужой базы.
Прошло года 3, а скриптик-то сохранил.

Код: sql
1.
2.
3.
4.
5.
6.
SELECT  referenced_database_name,  referenced_schema_name,OBJECT_NAME (referencing_id) AS referencing_object, 
     referenced_entity_name [called object from another data base]
FROM sys.sql_expression_dependencies
WHERE referenced_database_name IS NOT NULL and referenced_database_name<>db_name()
      AND is_ambiguous = 0
	  order by referenced_database_name,referencing_object
...
Рейтинг: 0 / 0
09.05.2018, 11:07
    #39642291
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу удобный способ менять имя базы в TSQL коде
KellyLynch,

Просто проект должен лежать в SSDT/TFS, имя этой базы должно быть описано в одной из переменных.
Всё.
...
Рейтинг: 0 / 0
09.05.2018, 19:38
    #39642411
Mind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ищу удобный способ менять имя базы в TSQL коде
Предыдущие клиенты лет за 5 вот также налопатили баз 20, и все ссылаются друг на друга, один такой большой клубок. Даже сделали специальные базы, в которых и данных то нет, одни cross-reference процедуры и функции. А тут недавно в связи с новомодными веяниями сказали хотим все в облако, да не просто VM облаке, а Ажурные базы. За 6 месяцев дело не сдвинулось с мертвой точки...
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ищу удобный способ менять имя базы в TSQL коде / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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