В SSRS, почему я получаю сообщение об ошибке "элемент с тем же ключом уже добавлен", когда я делаю новый отчет?
Я получаю следующую ошибку в SSRS
, и это меня озадачило сейчас:
An error occurred while the query design method was being saved.
An item with the same key has already been added
Что означает "элемент", хотя? Я даже попытался отредактировать RDL
и удалить все ссылки на хранимую процедуру Мне нужно использовать вызываемый prc_RPT_Select_BI_Completes_Data_View
.
Возможно, это связано с тем, что Хранимая процедура использует Dynamic SQL (обозначение N'
)?
По утрам в хранимой процедуре я:
SET @SQL + = N ' SELECT bi.SupplierID как '' ID поставщика '' , bi.SupplierName как '' Имя поставщика ''
,bi.PID as ''PID''
,bi.RespondentID as ''Respondent ID''
,lk_slt.Name as ''Entry Link Type''
,ts.SurveyNumber as ''Initial Survey ID'''
![enter image description here]()
Ответы
Ответ 1
Похоже, что SSRS имеет проблему (по крайней мере, в версии 2008) - я изучаю этот веб-сайт, который объясняет это
Где он говорит, если у вас есть два столбца (из двух таблиц разностей) с тем же именем, это вызовет эту проблему.
Из источника:
SELECT a.Field1, a.Field2, a.Field3, b.Field1, b.field99 FROM TableA a JOIN TableB b на a.Field1 = b.Field1
SQL обрабатывал его просто отлично, так как я имел префикс с псевдонимом (таблица). Но SSRS использует только имя столбца в качестве ключа, а не таблицы +, поэтому он задыхался.
Исправление было простым, либо переименовать второй столбец, т.е. b.Field1 AS Field01 или просто опустить поле вместе, что я и сделал.
Ответ 2
У меня есть опыт в прошлом. Исходя из этого, я могу сказать, что в целом мы получаем эту проблему, если ваш набор данных имеет несколько полей, которые указывают на тот же источник поля.
Взгляните на следующие сообщения для описания подробных ошибок
http://www.bi-rootdata.com/2012/09/an-error-occurred-during-report.html
http://www.bi-rootdata.com/2012/09/an-item-with-same-key-has-already-been.html
В вашем случае вы должны проверить все имена полей, возвращаемые Sp prc_RPT_Select_BI_Completes_Data_View, и убедиться, что все поля имеют уникальное имя.
Ответ 3
Я сталкиваюсь с той же проблемой. После отладки я исправил то же самое. если имя столбца в вашем запросе sql имеет несколько раз, то эта проблема возникает. Следовательно, используйте псевдоним в SQL-запросе, чтобы отличать имя столбца.
Пример:
Приведенный ниже запрос будет правильно работать в SQL-запросе, но создаст проблему в отчете SSRS:
Выберите P.ID, P.FirstName, P.LastName, D.ID, D.City, D.Area, D.Address
Из PersonalDetails P
Соединение слева СоединениеDetails D On P.ID = D.PersonalDetailsID
Причина: идентификатор упоминался дважды (несколько раз)
Правильный запрос:
Выберите P.ID как PersonalDetailsID, P.FirstName, P.LastName, D.ID, D.City, D.Area, D.Address
Из PersonalDetails P
Соединение оставлено СоединениеDetails D On P.ID = D.PersonalDetailsID
Ответ 4
У меня была такая же ошибка в запросе отчета. У меня были столбцы из разных таблиц с одинаковым именем и префиксом для каждой таблицы (например, выберите a.description, b.description, c.description), которая работает нормально в Oracle, но для отчета вы должны иметь уникальный псевдоним для каждой таблицы. столбец, поэтому просто добавьте псевдоним в поля с тем же именем (выберите a.description a_description, b.description b_description и т.д.)
Ответ 5
Я только что получил эту ошибку, и я узнал, что речь идет о псевдониме локальной переменной
в конце хранимой процедуры мне понравилось
select @localvariable1,@localvariable2
он отлично работал в sql, но когда я запускал это в ssrs
это всегда была ошибка, но после того, как я дал псевдоним, он исправлен.
select @localvariable1 as A,@localvariable2 as B
Ответ 6
Извините, это ответ старой ветке, но он все еще может быть полезен.
В дополнение к вышеупомянутым ответам,
Обычно это происходит, когда два столбца с одинаковыми именами, даже из разных таблиц, включены в один и тот же запрос.
например, если мы объединяем две таблицы город и штат, где таблицы имеют имя столбца
например название города и штата.
когда такой запрос добавляется к набору данных, ssrs удаляет имя таблицы или псевдоним таблицы и сохраняет только имя, которое в итоге дважды появляется в запросе и выдает ошибки как дубликат ключа.
Лучший способ избежать этого - использовать псевдоним, например, вызывая имена столбцов.
city.name как c_name
state.name как s_name.
Это решит проблему.