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

Откуда:
Сообщений: 87
У меня есть некий код, размещённый в нескольких процедурах некоей базы.
Этот код часто ссылается на другую базу [TheOtherBase]:

Select * FROM [TheOtherBase].[dbo].[TableName1] 


И тд.

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

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

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

Можно вопрос сфомулировать и по другому - "ищу удобный способ так организовать мой код, чтобы потом легко и быстро менять имя базы [TheOtherBase] на [TheOtherBaseNewName]"
9 апр 18, 14:03    [21323464]     Ответить | Цитировать Сообщить модератору
 Re: Ищу удобный способ менять имя базы в TSQL коде  [new]
Konst_One
Member

Откуда:
Сообщений: 11518
динамический sql
9 апр 18, 14:07    [21323483]     Ответить | Цитировать Сообщить модератору
 Re: Ищу удобный способ менять имя базы в TSQL коде  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
KellyLynch,

можно использовать синонимы
9 апр 18, 14:09    [21323495]     Ответить | Цитировать Сообщить модератору
 Re: Ищу удобный способ менять имя базы в TSQL коде  [new]
Konst_One
Member

Откуда:
Сообщений: 11518
для самой базы не получится
9 апр 18, 14:10    [21323507]     Ответить | Цитировать Сообщить модератору
 Re: Ищу удобный способ менять имя базы в TSQL коде  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
Konst_One
для самой базы не получится

понятное дело, но синонимы для объектов можно просто пересоздать с другим именем базы, когда понадобится
9 апр 18, 14:15    [21323533]     Ответить | Цитировать Сообщить модератору
 Re: Ищу удобный способ менять имя базы в TSQL коде  [new]
KellyLynch
Member

Откуда:
Сообщений: 87
Shakill,

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

?
9 апр 18, 14:19    [21323559]     Ответить | Цитировать Сообщить модератору
 Re: Ищу удобный способ менять имя базы в TSQL коде  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
KellyLynch
Shakill,
никогда раньше не пользовался....Вы про это: - https://docs.microsoft.com/en-us/sql/t-sql/statements/create-synonym-transact-sql
?

да, про это
создаете синонимы на объекты другой базы и в коде обращаетесь к этим объектам уже через синонимы
9 апр 18, 14:21    [21323580]     Ответить | Цитировать Сообщить модератору
 Re: Ищу удобный способ менять имя базы в TSQL коде  [new]
Гигабайт Мегабайтович Килобайтов
Member [заблокирован]

Откуда:
Сообщений: 5975
либо через линкованный сервер.
ПЫСЫ а вы уверены что базы "не уедут" с сервера? ))
9 апр 18, 15:27    [21323940]     Ответить | Цитировать Сообщить модератору
 Re: Ищу удобный способ менять имя базы в TSQL коде  [new]
KellyLynch
Member

Откуда:
Сообщений: 87
Гигабайт Мегабайтович Килобайтов
либо через линкованный сервер.
ПЫСЫ а вы уверены что базы "не уедут" с сервера? ))


"либо через линкованный сервер." - никогда не слышал раньше.
Оно? - https://docs.microsoft.com/en-us/sql/relational-databases/linked-servers/linked-servers-database-engine
9 апр 18, 15:36    [21323967]     Ответить | Цитировать Сообщить модератору
 Re: Ищу удобный способ менять имя базы в TSQL коде  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7762
KellyLynch,

linked server будет подключаться через "наружу".
9 апр 18, 16:30    [21324197]     Ответить | Цитировать Сообщить модератору
 Re: Ищу удобный способ менять имя базы в TSQL коде  [new]
blonduser
Member

Откуда:
Сообщений: 132
KellyLynch,

USE [TheOtherBaseNewName]
9 апр 18, 17:29    [21324328]     Ответить | Цитировать Сообщить модератору
 Re: Ищу удобный способ менять имя базы в TSQL коде  [new]
KellyLynch
Member

Откуда:
Сообщений: 87
blonduser
KellyLynch,

USE [TheOtherBaseNewName]


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

Согласен - это решение даст "определённый выигрыш" по сравнению с исходным кодом, где в каждой из процедур есть несколько конструкций "Select * FROM [TheOtherBase].[dbo].[TableName1]"
9 апр 18, 20:44    [21324654]     Ответить | Цитировать Сообщить модератору
 Re: Ищу удобный способ менять имя базы в TSQL коде  [new]
blonduser
Member

Откуда:
Сообщений: 132
KellyLynch
blonduser
KellyLynch,

USE [TheOtherBaseNewName]


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

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


Создаешь подключение к серверу.
Вызываешь USE [TheOtherBaseNewName].
И пока подключение активно все процедуры обращаются к указанной БД.
9 апр 18, 22:45    [21324800]     Ответить | Цитировать Сообщить модератору
 Re: Ищу удобный способ менять имя базы в TSQL коде  [new]
Glebanski
Member

Откуда: Msk ->NL
Сообщений: 308
Может поможет
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.
11 апр 18, 19:16    [21331002]     Ответить | Цитировать Сообщить модератору
 Re: Ищу удобный способ менять имя базы в TSQL коде  [new]
Сруль.
Member

Откуда:
Сообщений: 121
По бандитски.
Мне пришлось переживать похожий момент.
Идея не моя-босса, я её только озвучил в SQL.
Cоздаётся Вью(View) с именем таблицы TableName1 в своей родной базе.
Вью идёт туда, куда ему надо-в чужую базу. Если начнутся тормоза,
можо обратиться к табличной функции-то же самое Вью, только
с параметром. Приставка с именем базы из всех процедур выбивается.
Когда начнутся завалы-меняете только Вью. Это легче.
9 май 18, 10:29    [21397545]     Ответить | Цитировать Сообщить модератору
 Re: Ищу удобный способ менять имя базы в TSQL коде  [new]
Сруль.
Member

Откуда:
Сообщений: 121
А чтобы мне осталось время на ЮТУБ.
Босс-душа человек, подкинул скрипт,
как шукать объекты, зависимые от чужой базы.
Прошло года 3, а скриптик-то сохранил.

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
9 май 18, 10:47    [21397566]     Ответить | Цитировать Сообщить модератору
 Re: Ищу удобный способ менять имя базы в TSQL коде  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33672
Блог
KellyLynch,

Просто проект должен лежать в SSDT/TFS, имя этой базы должно быть описано в одной из переменных.
Всё.
9 май 18, 11:07    [21397587]     Ответить | Цитировать Сообщить модератору
 Re: Ищу удобный способ менять имя базы в TSQL коде  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Предыдущие клиенты лет за 5 вот также налопатили баз 20, и все ссылаются друг на друга, один такой большой клубок. Даже сделали специальные базы, в которых и данных то нет, одни cross-reference процедуры и функции. А тут недавно в связи с новомодными веяниями сказали хотим все в облако, да не просто VM облаке, а Ажурные базы. За 6 месяцев дело не сдвинулось с мертвой точки...
9 май 18, 19:38    [21398402]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить