Я использую много SQL-запросов и устал вводить полные префиксы
[LINKED_SERVER_ALIAS].[LINKED_SERVER_ON_LINKED_SERVER].[ПУТЬ К БАЗЕ ДАННЫХ].[SCHMEMA].TABLE
Невозможно изменить структуру сервера или напрямую войти на связанный сервер на другом связанном сервере.
Вопрос: существует ли команда sql-транзакции для создания глобального псевдонима, например создавать псевдоним my_linked_connection для [LINKED_SERVER_ALIAS].[LINKED_SERVER_ON_LINKED_SERVER].[ПУТЬ К БАЗЕ ДАННЫХ].[SCHMEMA].TABLE
что можно использовать:
выберите * из my_linked_connection.TABLE
дополнительная проблема заключается в том, что они относятся ко многим префиксам, поэтому обычный запрос на выборку возможен только с помощью openquery или объявления @cmd ... exec @cmd
Спасибо
Объедините часть префиксов внутри псевдонима связанного сервера sp_addlinked server.
Вы уверены, что можете использовать более 3 префиксов?
@siggemannen: Нет, это вопрос. (только с openquery и объявить cmd). Вот почему я прошу псевдоним для объединения. Зоар Пелед: Просмотр — это мой последний вариант, если ничего другого не получится. Действительно очень плохой спектакль. Linked_server поверх linked_server -> я знаю, я не являюсь их администратором
Вы можете создать несколько SYNONYM
в своей базе данных для таблиц на связанном сервере.
Хотя для ссылки на таблицу на другом сервере вы должны использовать четырехчастное имя; вы, кажется, дали пять частей именования, которые не являются «вещью» для объектов.
ага, он использует связанный сервер как «переход» на другой связанный сервер, это довольно круто (не очень круто)
Я думаю, что нет отличного решения, кроме представлений, которые заставят вас вводить меньше кода, если вы работаете с вещами openquery. Возможно, вы можете создать процедуру, которая обрабатывает общие логические вещи.
@siggemannen "откат", правильно. второй предоставляется ребятами из программного обеспечения ERP, обычно не открытыми для их БД. Я сравниваю данные 3-х систем ERP и объединяю таблицы часов записи из них. --> центральная БД в качестве администратора подключена к 3 связанным серверам, но один из них сам является связанным сервером.
Синоним это то, что вы ищете здесь
CREATE SYNONYM schema.tablename for linkedservername.remotedatabasename.schema.tablename
Преимущество этого (которое, как я полагаю, вы ищете) заключается в том, что вы можете перемещать представления, функции и процедуры через свои среды разработки без необходимости изменять объектный код; единственное, что должно отличаться, это то, что целевая база данных для синонима каждый раз будет разной.
Обратите внимание, что Synonym является функцией MSSQL и может не поддерживаться вашими драйверами ODBC/JDBC, поэтому перед развертыванием выполните полное тестирование.
это именно то, что я ищу. Но даже здесь они слишком много префиксов. Возможен ли синоним, просто чтобы объединить LinkedServerName и следующий префикс?
Когда вы ссылаетесь на него в своем запросе, предполагая, что схема для синонима является схемой по умолчанию (обычно dbo), вы просто ссылаетесь на нее, как на таблицу или представление в вашей локальной базе данных. СОЗДАЙТЕ СИНОНИМ dbo.OtherTable ДЛЯ LinkedServer.OtherDatabase.dbo.OtherTable Затем ВЫБЕРИТЕ * ИЗ OtherTable
перечитывая .... Нет, синоним должен состоять из 4 частей, если база данных удалена. Вы можете избежать соглашения об именовании из 3 частей, если база данных находится в одном экземпляре, и соглашения об именовании из 2 частей, если она находится в одной базе данных (например, в DEV источник и цель находятся в одной базе данных, но в производстве они разделены. ..) Синоним ДОЛЖЕН принадлежать схеме, поэтому локально всегда будет состоять из 2 частей, но если он находится в схеме по умолчанию, вы можете опустить префикс схемы, если нет конфликта имен.
Также обратите внимание, что синонимы не могут быть объединены в цепочку, то есть у вас не может быть синоним на вашем сервере, ссылающийся на другой синоним на удаленном сервере, поэтому в лучшем случае вы можете «сжать» 4 части имени до одной или двух.
и если вы используете удаленное представление в качестве синонима, вы не сможете получить доступ к дереву зависимостей.
Я приму этот ответ, потому что я думаю, что нет возможности удалить 5 частей меньше
Это уменьшает его. вам нужно настроить синоним только один раз, а затем вы можете использовать его так же, как таблицу или представление.
Нет, это не уменьшит его, потому что вам нужно указать таблицу, чтобы создать синоним. я не могу создать синоним внутри связанного сервера, только в первом. мне всегда нужно начинать с linkedserver1.linkedserver2 ... -> всегда 1 префикс, чтобы указать таблицу
Я не знал, что вы хотите пройти через 2 связанных сервера. Согласно другому комментарию, я не думаю, что SQL позволяет вам звонить через 2 связанных сервера. Похоже, кто-то выше по пищевой цепочке должен обсудить безопасность и конфигурацию связанного сервера. Если вы находитесь на сервере C и видите только сервер B, который может видеть сервер A, то C не может запрашивать данные на A; данные должны быть либо сохранены на B, либо дать C прямое связанное серверное соединение с A
Как насчет чего-то простого, например локального создания представления в собственной базе данных, которое будет выполнять только что-то вроде
select * from <complex long name here>
? Это может повлиять на производительность, хотя мне трудно поверить, что это будет намного хуже, чем использование связанного сервера поверх другого связанного сервера.