2013-03-05 5 views
0

Я пытаюсь создать представление в C#, включающее две отдельные таблицы, где одно поле имеет одинаковое имя в обеих таблицах. Изменение имен столбцов невозможно и не создает новые имена для столбцов только для представления. Это связано с тем, что данные не могут быть изменены каким-либо образом. Мне было сообщено что-нибудь:Проблема, связанная с одноименными столбцами

Column names in each view or function must be unique.
Column name 'Child_ID' in view or function 'Testing' is specified more than once.

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

+1

«Вид» в C# очень расплывчатый. Покажите код. –

+2

Даже если вы могли бы иметь два столбца с именем «Child_ID» в одном представлении - и вы уже знаете, что вы не можете, - как вы думаете, должен возвращаться запрос «SELECT Child_ID FROM dbo.MyView»? Один столбец (какой?), Два столбца (в каком порядке?) Или что-то еще? Даже на очень абстрактном уровне трудно понять, как это может работать. – Pondlife

+0

@Pondlife - Обычно указывая соответствующее имя таблицы в квадратных скобках, прежде чем поле будет работать в нормальном выборе. Я надеялся, что так будет и здесь –

ответ

2

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

Если Child_ID имеет различных значения, то первое от меня вопрос, должны ли они назвать то же самое, но при условии, есть причина для этого, использовать псевдоним.

SELECT 
    Child_ID_FromTable1 = Table1.Child_ID, 
    Child_ID_FromTable2 = Table2.Child_ID 
... 

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

  1. автоматически назначать псевдонимы в некоторых заранее определенным образом (как я показал выше, это Wouldn это трудно сделать);
  2. заставляет пользователя выбирать псевдоним для одного или обоих столбцов; или
  3. заставляют пользователя выбирать тот или иной, который необходимо удалить из выходного списка.
+0

Псевдонимы, на самом деле, не являются подходящим вариантом. Можно ли запросить представление с исходными значениями, отличными от псевдонимов? –

+0

@DotNET извините, я не следую вашему вопросу. Как сказал Тим, «что-то» должно решить проблему - здесь нет никакой магии. Либо ваш строитель запросов должен оставить дубликаты столбцов, либо ему нужно назначить псевдонимы. –

2

Почему вы не используете колонку Aliases?

SELECT T1.Child_ID AS T1ChildID, T2.Child_ID AS T2ChildID,... 
+0

Я не могу использовать псевдонимы, так как мое приложение C# является построителем запросов, который принимает любую базу данных в качестве входных данных. Таким образом, как пользователи могли бы запрашивать псевдонимы? –

+0

Тогда ваше приложение C# должно решить проблему. Конструктор запросов должен гарантировать уникальность всех имен столбцов. –

+0

Возможно ли запросить представление с исходными значениями, отличными от псевдонимов? –

Смежные вопросы