Developer29 Ответов: 2

Многосоставный идентификатор не может быть привязан.


Привет... Я хочу обновить сведения о Trns_Enrollmentmaster из Trns_Enrollmentdetails.. Я передаю несколько деталей из переднего плана, а остальные детали обновляются из таблицы деталей...

Когда я пытаюсь выполнить этот запрос.... Я получаю эту ошибку

Многосоставный идентификатор не может быть привязан.

для тех параметров, которые берутся из подробной таблицы...Может ли кто - нибудь дать предложение по этому поводу?

Что я уже пробовал:

ALTER proc [dbo].[SP_T_PrimaryUpdate]


(@UHIDNO varchar(30),
@Yearautoid int,
@Membername varchar(50),
@ISPrimaryChanged bit,
@PrimaryChangeby varchar(50),
@Primarychangedon datetime,
@PrmaryChangedReason varchar(50),
@PrimaryChangedmembername varchar(50),
@PrimarychangeIP varchar(50))

AS
  BEGIN
        
        UPDATE Trns_Enrollmentmaster  SET Membername=@Membername,ISPrimaryChanged=@ISPrimaryChanged,
               Primarychangedon=@Primarychangedon,PrimaryChangeby=@PrimaryChangeby,PrimaryChangedmembername=@PrimaryChangedmembername,
               PrmaryChangedReason=@PrmaryChangedReason,
               PrimarychangeIP=@PrimarychangeIP, Age =a.age, Photo=a.photo, Gender = a.Gender
               
               SELECT a.age,a.photo,a.Gender FROM dbo.Trns_Enrollmentdetails AS a INNER JOIN dbo.Trns_Enrollmentmaster  ON a.UHIDNO=@UHIDNO and a.Yearautoid=@Yearautoid  AND Trns_Enrollmentmaster.UHIDNO=@UHIDNO AND Trns_Enrollmentmaster.Yearautoid=@Yearautoid 
      END

Richard Deeming

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

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

Полное сообщение об ошибке будет выглядеть примерно так Многосоставный идентификатор "..." не может быть связан Часть внутри кавычек, которую вы удалили, сообщает вам, какой идентификатор вызывает проблему.

2 Ответов

Рейтинг:
8

Developer29

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


CHill60

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

PrimarychangeIP=@PrimarychangeIP, Age =a.age, Photo=a.photo, Gender = a.Gender
потому что вы использовали псевдоним a это нигде не определено в этой команде обновления.
Если вы хотите сделать обновление из соединения, то (одиночный) запрос должен выглядеть так (непроверенный)
UPDATE EM SET Membername=@Membername,ISPrimaryChanged=@ISPrimaryChanged,
       Primarychangedon=@Primarychangedon,PrimaryChangeby=@PrimaryChangeby,PrimaryChangedmembername=@PrimaryChangedmembername,
       PrmaryChangedReason=@PrmaryChangedReason,
       PrimarychangeIP=@PrimarychangeIP, Age =a.age, Photo=a.photo, Gender = a.Gender
FROM dbo.Trns_Enrollmentdetails AS a 
INNER JOIN dbo.Trns_Enrollmentmaster  AS EM ON a.UHIDNO=EM.UHIDNO AND a.Yearautoid=EM.Yearautoid
WHERE a.UHIDNO=@UHIDNO and a.Yearautoid=@Yearautoid
В моей статье есть наглядный пример Циклы обработки в SQL Server[^] - ищите "обновление таблиц с помощью соединений"

Рейтинг:
20

Graeme_Grant

Google-ваш друг. Этот поиск нашел для вас много возможных ответов:
Многосоставный идентификатор не может быть привязан. - поиск Google[^]

.. в том числе и этот драгоценный камень: sql - что такое "многосоставный идентификатор" и почему он не может быть привязан? - переполнение стека[^]