Я постоянно получаю эти ошибки, когда пытаюсь обновить таблицы на основе другой таблицы. В итоге я переписываю запрос, меняю порядок объединений, меняю некоторые группировки, и затем, в конце концов, это работает, но я просто не совсем понимаю.
Что такое «составной идентификатор»?
Когда «многокомпонентный идентификатор» не может быть связан?
С чем это связано в любом случае?
В каких случаях эта ошибка произойдет?
Каковы лучшие способы предотвратить это?
Конкретная ошибка в SQL Server 2005:
Многоэлементный идентификатор "..." не может быть связан.
Вот пример:
UPDATE [test].[dbo].[CompanyDetail]
SET Mnemonic = [dbBWKMigration].[dbo].[Company].[MNEMONIC],
[Company Code] = [dbBWKMigration].[dbo].[Company].[COMPANYCODE]
WHERE [Company Name] = **[dbBWKMigration].[dbo].[Company].[COMPANYNAME]**
Фактическая ошибка:
Сообщение 4104, уровень 16, состояние 1, строка 3 Не удалось связать идентификатор из нескольких частей "dbBWKMigration.dbo.Company.COMPANYNAME".
источник
На самом деле, иногда, когда вы обновляете одну таблицу из данных другой таблицы, я думаю, что одна из распространенных проблем, которые вызывают эту ошибку, - это когда вы неправильно используете сокращения таблиц или когда они не нужны . Правильное утверждение ниже:
Обратите внимание, что
SomeField
столбец из Table1 не имеетt1
квалификатора, аt1.SomeField
простоSomeField
.Если кто-то попытается обновить его, указав
t1.SomeField
инструкцию, вы получите ошибку, состоящую из нескольких частей, которую вы заметили.источник
ABBREVIATION.My_Field
, когда я просто нуждалсяSET.My_Field
;Это, вероятно, опечатка. Найдите в своем коде места, где вы вызываете [schema]. [TableName] (в основном везде, где вы ссылаетесь на поле) и убедитесь, что все написано правильно.
Лично я стараюсь избежать этого, используя псевдонимы для всех моих таблиц. Это очень помогает, когда вы можете сократить длинное имя таблицы до аббревиатуры ее описания (т.е. WorkOrderParts -> WOP), а также делает ваш запрос более читабельным.
Редактировать: в качестве дополнительного бонуса вы сэкономите TONS нажатий клавиш, когда все, что вам нужно набрать, - это трех- или четырехбуквенный псевдоним против имен схемы, таблицы и поля вместе.
источник
Привязка = ваше текстовое представление определенного столбца отображается на физический столбец в некоторой таблице, в некоторой базе данных, на некотором сервере.
Составной идентификатор может быть: MyDatabase.dbo.MyTable. Если вы ошиблись в любом из этих идентификаторов, значит, у вас есть многокомпонентный идентификатор, который невозможно сопоставить.
Лучший способ избежать этого - правильно написать запрос в первый раз или использовать плагин для студии управления, который предоставляет intellisense и, таким образом, помогает вам избежать опечаток.
источник
Вы, вероятно, опечатка. Например, если у вас есть таблица с именем Customer в базе данных с именем Sales, вы можете ссылаться на нее как Sales..Customer (хотя лучше ссылаться на нее, включая имя владельца (dbo является владельцем по умолчанию), например Sales.dbo .Клиент.
Если вы ввели Sales ... Customer, возможно, вы получили сообщение.
источник
Если вы уверены, что это не опечатка, возможно, это опечатка.
Какое сопоставление вы используете? Проверь это.
источник
При обновлении таблиц убедитесь, что вы не ссылаетесь на поле вашего обновления через псевдоним.
У меня только что была ошибка со следующим кодом
Мне пришлось удалить ссылку на псевдоним в операторе set, чтобы он читался так
источник
Я обнаружил, что много получаю, когда пытаюсь сокращать, например:
Меняя это на:
Заставляет запрос работать и не выдает ошибку.
источник
Код ошибки
Код решения
Как вы видите, в коде ошибки
dbo.SubModule
он уже определен как SM, но я используюdbo.SubModule
следующую строку, поэтому произошла ошибка. используйте объявленное имя вместо фактического имени. Задача решена.источник
У меня была эта проблема, и это оказалось неправильным псевдонимом таблицы. Исправление это решило проблему.
источник
Моя по ошибке выкладывала схему Alias на стол:
источник
Добавление псевдонима таблицы перед полем Set вызывает эту проблему в моем случае.
Справа Обновление таблицы 1 Установите SomeField = t2.SomeFieldValue из таблицы 1 t1 Внутреннее соединение таблицы 2 как t2 на t1.ID = t2.ID
Неправильное обновление таблицы 1 Установите t1.SomeField = t2.SomeFieldValue из таблицы 1 t1 Внутреннее соединение таблицы 2 как t2 на t1.ID = t2.ID
источник
У меня было
P.PayeeName AS 'Payer' --,
и две строки комментариев выкинули эту ошибкуисточник
Я действительно забыл присоединить стол к остальным, поэтому я получил ошибку
Предполагается, что это так:
И не так
источник
Мой лучший совет при наличии ошибки - использовать [] скобки для сортировки имен таблиц, сокращение таблиц иногда приводит к ошибкам (иногда сокращения таблиц работают просто отлично ... странно)
источник
Я получал эту ошибку и просто не мог видеть, где проблема. Я дважды проверил все свои псевдонимы и синтаксис, и ничто не выглядело неуместным. Запрос был похож на те, которые я пишу все время.
Я решил просто переписать запрос (я первоначально скопировал его из файла отчета .rdl) ниже, снова, и он работал нормально. Глядя на запросы сейчас, они выглядят одинаково для меня, но мой переписанный работает.
Просто хотел сказать, что, возможно, стоит попробовать, если больше ничего не работает.
источник
При вводе таблицы FROM эти ошибки исчезнут. Введите FROM ниже того, что вы наберете, тогда Intellisense будет работать, и будет работать многокомпонентный идентификатор.
источник
Я столкнулся с этой проблемой и решил ее, но есть разница между вашим и моим кодом. Несмотря на то, что я думаю, вы можете понять, что такое «не состоящий из нескольких частей идентификатор»
Когда я использовал этот код
Я столкнулся с проблемой многокомпонентного идентификатора
но когда я использую одинарную кавычку для адреса электронной почты, это решено
источник