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

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



И тд.

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

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

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

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

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

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

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

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

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

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

USE [TheOtherBaseNewName]

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

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

USE [TheOtherBaseNewName]

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

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

Создаешь подключение к серверу.
Вызываешь USE [TheOtherBaseNewName].
И пока подключение активно все процедуры обращаются к указанной БД.
...
Рейтинг: 0 / 0
Ищу удобный способ менять имя базы в TSQL коде
    #39628704
Glebanski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может поможет
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
Ищу удобный способ менять имя базы в TSQL коде
    #39642282
Сруль.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По бандитски.
Мне пришлось переживать похожий момент.
Идея не моя-босса, я её только озвучил в SQL.
Cоздаётся Вью(View) с именем таблицы TableName1 в своей родной базе.
Вью идёт туда, куда ему надо-в чужую базу. Если начнутся тормоза,
можо обратиться к табличной функции-то же самое Вью, только
с параметром. Приставка с именем базы из всех процедур выбивается.
Когда начнутся завалы-меняете только Вью. Это легче.
...
Рейтинг: 0 / 0
Ищу удобный способ менять имя базы в TSQL коде
    #39642285
Сруль.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чтобы мне осталось время на ЮТУБ.
Босс-душа человек, подкинул скрипт,
как шукать объекты, зависимые от чужой базы.
Прошло года 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
Ищу удобный способ менять имя базы в TSQL коде
    #39642291
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KellyLynch,

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


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