Можно ли написать представление базы данных, которое охватывает отношения «один ко многим»?
Поэтому я не обязательно говорю, что это даже хорошая идея, если бы это было возможно, поскольку схема представления была бы чрезвычайно изменчивой, но есть ли способ представить отношения «все-многие» в одном представлении?
Например, допустим, у меня есть клиент, который может иметь любое количество адресов в базе данных. Есть ли способ перечислить каждый столбец каждого адреса, возможно, число как часть псевдонима (например, столбцы, такие как идентификатор клиента, имя, адрес_Street_1, адрес_Street_2 и т. Д.)?
Благодаря!
- ASP.NET - проектирование процессов SQL Подключение к нескольким БД
- Конструктивное решение для хранения изображений
- Наилучшее имя для столбца в таблице SQL Server
- Я не хочу, чтобы мой объект знал о моем бизнес-слое - так, как его загрузить?
- Несколько столбцов «ID» в базе данных SQL Server?
- Имеют разные записи пользователей в одной таблице - SQL Server
- Уникальный идентификатор против IDENTITY и Material Code - который является лучшим выбором для первичного ключа?
- Microsoft Sync Services - хорошее решение для меня?
- Дженерики и база данных - проблема дизайна
- Как вы объединяете таблицы с первичными ключами autonumber?
- sql server: Является ли это вложение в трансакцию достаточным для получения уникального номера из базы данных?
- Повторное использование формул агрегатного уровня в SQL - любая хорошая тактика?
- Таблицы с соотношением 1-1 (информация и статистика)
Не совсем – вы действительно делаете динамический шар. Можно использовать 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 столбца адреса в вашем представлении, а затем заполнить первые четыре результата вашего отношения «один ко многим» в этих столбцах. Это не совсем динамический вид, который вы хотите, но он также намного более стабилен / полезен, на мой взгляд.