SQL - Как использовать один и тот же префикс базы данных для нескольких ссылок на таблицы - PullRequest
0 голосов
/ 13 декабря 2018

Совершенно новый для SQL ...

Я пытаюсь написать что-то, что начинается с:

SELECT someColumn
    FROM someTable

Однако в моем конкретном случае таблица имеет несколько префиксов, так чтооператор FROM будет выглядеть примерно так:

FROM someDatabase.dbo.someTable

Я пытаюсь реорганизовать существующий запрос, требующий нескольких соединений и, таким образом, нескольких ссылок на префикс пути выше (т. е. someDatabase.dbo...).

Это кажется невероятно неэффективным, но я не могу понять, как назначить переменную, на которую я могу ссылаться каждый раз, в отличие от ссылки на полный путь каждой таблицы.

Просто чтобы быть полностью яснымвсе таблицы имеют имена, начинающиеся с dbo в SQL Server Studio, поэтому имя таблицы действительно dbo.someTable, но я считаю, что это читается так, как если бы это был дополнительный префикс, но я был бы рад установить someDatabase какпо умолчанию (я пытался USE someDatabase, который не работал) или в качестве короткой переменной (например, @db для ссылки, например, @db.someTable в качестве примера кода sudo).

Любая помощь приветствуется.

Ответы [ 3 ]

0 голосов
/ 13 декабря 2018

Я не уверен, отвечает ли это на ваш вопрос, но если вы используете схему по умолчанию (dbo), вы можете ввести два периода и пропустить их.Я понимаю, что это только экономит вам немного времени на ввод (вам все равно придется набирать имя базы данных), но это что-то.Я могу ошибаться.

0 голосов
/ 13 декабря 2018

Я бы не согласился с тем, что это «невероятно неэффективно».Если вы просто говорите о нажатиях клавиш, существует любое количество аддонов (или даже intellisense), которые могут сэкономить ваше время на нажатие клавиш.Я использую надстройку SSMS под названием SSMSToolsPack для связывания различных фрагментов кода, но Redgate, ApexSql и даже VSCode также имеют аналогичные предложения.

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

В любом случае, привычка к полному определению имен ваших объектов является хорошей практикой.

Что касается параметризации части объекта, как отметил Аарон Бертран, то это не совсем так, как работают объекты базы данных.Если только вы не используете динамический SQL, который представляет собой целую червь червей, я не рекомендую его открывать

Если ничего из этого не является удовлетворительным, и вы склонны к тому, что вам не нужно вводить префикс базы данных и схемы, вы можете использовать SYNONYMs или VIEWs .Первый из них - это самое близкое, что вам может понадобиться - абстрагировать полностью определенное имя в другой формат.Последнее дает вам больше контроля над тем, что возвращает содержимое представления, но даже там вам придется предоставить полностью определенные объекты в теле представления.

0 голосов
/ 13 декабря 2018

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

В общих чертах это будет выглядеть примерно так:

SELECT
   bt.ColumnOne
  ,bt.ColumnTwo
  ,dt1.ColumnThree
  ,dt2.ColumnFour
FROM
  database1.dbo.BaseTable as bt
  JOIN
  database2.dbo.DetailTableOne as dt1
    ON dt1.ID = bt.ID
  JOIN
  database3.dbo.DetailTableTwo as dt2
    ON dt2.ColumnWhatever = dt1.ColumnWhatever
WHERE
  dt.YetAnotherColumn = @SomeValue;

Если вы используете значимые псевдонимы, достаточно просто запомнить, к чему относится каждый псевдоним и откуда он.И вам определенно следует использовать значимые псевдонимы, как Аарон указывает в этой статье, что я посылаю электронные письма людям, с которыми работаю, по крайней мере, один раз в неделю: Плохие привычки бросать курить: использование псевдонимов таблиц, таких как (a, b, c) или (t1, t2, t3)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...