Можно ли написать представление базы данных, которое охватывает отношения «один ко многим»?

Поэтому я не обязательно говорю, что это даже хорошая идея, если бы это было возможно, поскольку схема представления была бы чрезвычайно изменчивой, но есть ли способ представить отношения «все-многие» в одном представлении?

Например, допустим, у меня есть клиент, который может иметь любое количество адресов в базе данных. Есть ли способ перечислить каждый столбец каждого адреса, возможно, число как часть псевдонима (например, столбцы, такие как идентификатор клиента, имя, адрес_Street_1, адрес_Street_2 и т. Д.)?

Благодаря!

Не совсем – вы действительно делаете динамический шар. Можно использовать OPENROWSET для получения динамически сгенерированного запроса, но насколько это целесообразно, трудно сказать, не видя больше о бизнес-кейсе.

Сначала создайте сохраненный процесс, который делает динамическую ось, как я сделал в проводнике данных StackExchange.

В основном вы создаете динамический SQL, который строит список столбцов. Это можно сделать только в хранимой процедуре. Это нормально для звонков.

Но как насчет того, хотите ли вы повторно использовать это во множестве разных объединений или специальных запросов?

Затем ознакомьтесь с этой статьей : «Использование SQL-серверов OPENROWSET для нарушения правил»

Теперь вы можете вызывать ваш сохраненный процесс, зацикливаясь на сервере, а затем получая результаты в наборе строк – это может быть в представлении!

Покойный Кен Хендерсон имеет несколько хороших примеров этого в своей прекрасной книге : «Руководство для гуру хранимых процедур SQL, XML и HTML» (вам нужно любить маленькие «Covers .NET!» На обложке, которая хорошо захватывает zeitgeist за 2002 год!).

Он охватывает только петлевую часть (с представлениями и пользовательскими функциями), менее подробный синтаксис PIVOT не был доступен до 2005 года, но PIVOTs также могут быть сгенерированы с использованием оператора CASE в качестве характерной функции .

Очевидно, что этот метод имеет оговорки (я даже не могу это сделать на нашем производственном сервере).

Да – использование:

CREATE VIEW customer_addresses AS SELECT t.customer_id, t.customer_name, a1.street AS address_street_1, a2.street AS address_street_2 FROM CUSTOMER t LEFT JOIN ADDRESS a1 ON a1.customer_id = t.customer_id LEFT JOIN ADDRESS a2 ON a2.customer_id = t.customer_id 

Если бы вы предоставили больше информации, было бы легче дать вам лучший ответ. Возможно, вы ищете сводные данные (превратите строки в столбцы).

Проще говоря, нет. Не без динамического воссоздания представления каждый раз, когда вы хотите использовать его по крайней мере, то есть.

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

  • SQL Server 2008: N небольших баз данных базы данных VS 1 с N схемами
  • Какой подход вы бы использовали для этой конкретной проблемы проектирования баз данных?
  • Исторические, проверенные и неизменные данные
  • Как переопределить Distinct
  • Общий объем данных (несколько MDF) и другой общий том для журналов (несколько LDF) в SAN
  • Скрипты для переноса изменений схемы из базы данных разработки в производственную базу данных
  • Sql table design - выбор первичного ключа из уникального ключа и бизнес-ключа
  • Принцип работы основного ключа SQL Guid
  • Имеет ли несколько файлов данных / журналов хорошую вещь даже на одном и том же LUN?
  • Какой подход / дизайн следует использовать при создании совершенно новой системы?
  • Данные на сервере Sql должны использовать Unicode?
  • Interesting Posts

    Удалите все таблицы в базе данных SQL Server, за исключением нескольких

    Если ошибка затем вставить

    SQL Server выбирает отдельный ад

    mysql: выберите несколько значений строк в формате, разделенном запятыми, используя COALESCE

    Вставить запрос – executeUpdate, возвращающий -1

    Сравните значения для последовательных дат того же месяца

    SQL Server: как создать хранимую процедуру

    Вставка BULK SQL Server с нестандартным значением NULL

    Группировать по количеству в неделю и показывать только запись с максимальной суммой (доступ)

    Поля AutoIncrement в базах данных без поля автоинкремента

    Как сохранить изображение в базе данных SQL Server из приложения Silverlight?

    Максимальный размер массива после оператора T-SQL IN?

    LINQ2SQL и NHibernate, группировка по вычисленным столбцам

    Индекс метаданных PreparedStatement выходит за пределы допустимого диапазона, когда он не находится за пределами допустимого диапазона

    Тайм-аут блокировки SQL Server превысил количество записей в цикле

    Давайте будем гением компьютера.