MSSQL избегает нескольких префиксов, используя псевдоним

Я использую много 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.

Как насчет чего-то простого, например локального создания представления в собственной базе данных, которое будет выполнять только что-то вроде select * from <complex long name here>? Это может повлиять на производительность, хотя мне трудно поверить, что это будет намного хуже, чем использование связанного сервера поверх другого связанного сервера.

Zohar Peled 14.02.2023 09:32

Вы уверены, что можете использовать более 3 префиксов?

siggemannen 14.02.2023 10:01

@siggemannen: Нет, это вопрос. (только с openquery и объявить cmd). Вот почему я прошу псевдоним для объединения. Зоар Пелед: Просмотр — это мой последний вариант, если ничего другого не получится. Действительно очень плохой спектакль. Linked_server поверх linked_server -> я знаю, я не являюсь их администратором

rm8019 14.02.2023 10:03

Вы можете создать несколько SYNONYM в своей базе данных для таблиц на связанном сервере.

Larnu 14.02.2023 10:03

Хотя для ссылки на таблицу на другом сервере вы должны использовать четырехчастное имя; вы, кажется, дали пять частей именования, которые не являются «вещью» для объектов.

Larnu 14.02.2023 10:11

ага, он использует связанный сервер как «переход» на другой связанный сервер, это довольно круто (не очень круто)

siggemannen 14.02.2023 10:16

Я думаю, что нет отличного решения, кроме представлений, которые заставят вас вводить меньше кода, если вы работаете с вещами openquery. Возможно, вы можете создать процедуру, которая обрабатывает общие логические вещи.

siggemannen 14.02.2023 10:54

@siggemannen "откат", правильно. второй предоставляется ребятами из программного обеспечения ERP, обычно не открытыми для их БД. Я сравниваю данные 3-х систем ERP и объединяю таблицы часов записи из них. --> центральная БД в качестве администратора подключена к 3 связанным серверам, но один из них сам является связанным сервером.

rm8019 14.02.2023 13:52
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
8
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Синоним это то, что вы ищете здесь

CREATE SYNONYM schema.tablename for linkedservername.remotedatabasename.schema.tablename

Преимущество этого (которое, как я полагаю, вы ищете) заключается в том, что вы можете перемещать представления, функции и процедуры через свои среды разработки без необходимости изменять объектный код; единственное, что должно отличаться, это то, что целевая база данных для синонима каждый раз будет разной.

Обратите внимание, что Synonym является функцией MSSQL и может не поддерживаться вашими драйверами ODBC/JDBC, поэтому перед развертыванием выполните полное тестирование.

это именно то, что я ищу. Но даже здесь они слишком много префиксов. Возможен ли синоним, просто чтобы объединить LinkedServerName и следующий префикс?

rm8019 14.02.2023 10:58

Когда вы ссылаетесь на него в своем запросе, предполагая, что схема для синонима является схемой по умолчанию (обычно dbo), вы просто ссылаетесь на нее, как на таблицу или представление в вашей локальной базе данных. СОЗДАЙТЕ СИНОНИМ dbo.OtherTable ДЛЯ LinkedServer.OtherDatabase.dbo.OtherTable Затем ВЫБЕРИТЕ * ИЗ OtherTable

Aaron Reese 14.02.2023 11:32

перечитывая .... Нет, синоним должен состоять из 4 частей, если база данных удалена. Вы можете избежать соглашения об именовании из 3 частей, если база данных находится в одном экземпляре, и соглашения об именовании из 2 частей, если она находится в одной базе данных (например, в DEV источник и цель находятся в одной базе данных, но в производстве они разделены. ..) Синоним ДОЛЖЕН принадлежать схеме, поэтому локально всегда будет состоять из 2 частей, но если он находится в схеме по умолчанию, вы можете опустить префикс схемы, если нет конфликта имен.

Aaron Reese 14.02.2023 11:35

Также обратите внимание, что синонимы не могут быть объединены в цепочку, то есть у вас не может быть синоним на вашем сервере, ссылающийся на другой синоним на удаленном сервере, поэтому в лучшем случае вы можете «сжать» 4 части имени до одной или двух.

Zohar Peled 14.02.2023 11:42

и если вы используете удаленное представление в качестве синонима, вы не сможете получить доступ к дереву зависимостей.

Aaron Reese 14.02.2023 11:49

Я приму этот ответ, потому что я думаю, что нет возможности удалить 5 частей меньше

rm8019 14.02.2023 13:16

Это уменьшает его. вам нужно настроить синоним только один раз, а затем вы можете использовать его так же, как таблицу или представление.

Aaron Reese 14.02.2023 13:33

Нет, это не уменьшит его, потому что вам нужно указать таблицу, чтобы создать синоним. я не могу создать синоним внутри связанного сервера, только в первом. мне всегда нужно начинать с linkedserver1.linkedserver2 ... -> всегда 1 префикс, чтобы указать таблицу

rm8019 14.02.2023 13:38

Я не знал, что вы хотите пройти через 2 связанных сервера. Согласно другому комментарию, я не думаю, что SQL позволяет вам звонить через 2 связанных сервера. Похоже, кто-то выше по пищевой цепочке должен обсудить безопасность и конфигурацию связанного сервера. Если вы находитесь на сервере C и видите только сервер B, который может видеть сервер A, то C не может запрашивать данные на A; данные должны быть либо сохранены на B, либо дать C прямое связанное серверное соединение с A

Aaron Reese 14.02.2023 15:10

Другие вопросы по теме