Динамические имена столбцов - PullRequest
4 голосов
/ 09 июля 2010

Можно ли создать представление (не хранимая процедура) с динамическими именами столбцов на основе другой таблицы? Например:

Code:
CodeId|Description
------------------
     1|Title
     2|Notes

Data:
DataId|Content|CodeId|GroupId
-----------------------------
     1|Title1 |     1|      1
     2|Note1  |     2|      1
     3|Title2 |     1|      2
     4|Note2  |     2|      2

Select Result:
GroupId|Title |Notes
-------------------
      1|Title1|Note1
      2|Title2|Note2

Имена столбцов «Заголовок» и «Примечания» будут взяты из таблицы Code. Я предполагаю, что ответ - нет, но хотел бы подтвердить. Спасибо!

Редактировать: Я понимаю, как это может быть "опасно". Если кто-то обновит описание кода, представление изменится, нарушив любой SQL, зависящий от имен столбцов. В этом случае я мог бы использовать CodeId, который нельзя было бы изменить.

Ответы [ 3 ]

1 голос
/ 09 июля 2010

Вы можете написать программу на Java, C или любом другом, который динамически создает оператор «создания представления», используя значения из базы данных, а затем выполняет его.

Если вы ищете способ сделать это только с помощью операторов SQL, я согласен, что ответ, вероятно, «не может быть сделан», но я неохотно делаю такие заявления, так как люди всегда придумывают умные способы сделать то, о чем я никогда не думал.

1 голос
/ 09 июля 2010

Опасностей модели EAV (Entity-Attribute-Value) много, и вы просто настраиваете себя на массу головных болей в будущем. С учетом сказанного ваш конкретный вопрос кажется возможным для меня решить. Вы были предупреждены, хотя ...

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

1 голос
/ 09 июля 2010

Я думал, в худшем случае, вы могли бы сделать что-то, где в первом возвращенном ряду были все заголовки столбцов. Было бы немного сложно, и вам, вероятно, пришлось бы пострадать из-за снижения производительности для UNION, но звучит выполнимо.

...