Типы возврата для следующих хранимых процедур не могут быть обнаружены - PullRequest
27 голосов
/ 12 августа 2011

При перетаскивании хранимой процедуры в файл dbml я получаю эту ошибку:

Неизвестный тип возврата
Типы возврата для следующих хранимых процедур не могут быть обнаружены. Установите тип возврата для каждой хранимой процедуры в окне «Свойства».

Как я могу устранить эту ошибку?

Ответы [ 13 ]

21 голосов
/ 12 августа 2011

Эта проблема возникает всякий раз, когда разработчик не может определить тип возвращаемого SP.
Та же проблема и решения, описанные здесь
Как получить множественный набор результатов процедуры, используя LINQ to SQL

14 голосов
/ 28 ноября 2012

Я использовал временную таблицу в своем SQL и получал эту ошибку.Я преобразовал временную таблицу в переменные таблицы, и это решило мою проблему.

14 голосов
/ 19 марта 2012

Это может быть также проблемой прав доступа. Если хранимая процедура не имеет доступа к таблице, вы получаете ту же ошибку. У меня был запрос на выборку данных из другой базы данных, на которую у меня не было прав (на самом деле учетная запись, на которой работало подключение к Visual Studio, не имела этих прав), и я получил ту же ошибку. После добавления правильных прав все прошло нормально.

Попытка выполнить хранимую процедуру внутри VS2010 (щелкнув правой кнопкой мыши в обозревателе сервера и выбрав «Выполнить»), помогла мне решить проблему.

13 голосов
/ 27 ноября 2014

Добавьте эти строки сразу после объявления параметров

AS
IF 1=0 BEGIN
 SET FMTONLY OFF
END

После этого напишите BEGIN и начните работу процедуры.

8 голосов
/ 24 марта 2014

Я только что добавил около 300 сохраненных процедур в мой DBML и столкнулся со многими проблемами, отмеченными здесь и в других местах.

Вот краткое изложение причин и способов устранения ошибки «Не удалось обнаружить типы возврата для следующих хранимых процедур», исходя из того, что я лично испытал. Обратите внимание, что проблемы, описанные ниже, могут возникать в SP, с которым у вас возникла ошибка, или в любом другом SP, который вызывается из этого SP прямо или косвенно.

  • Объединение целых чисел со строкой с использованием символа '+'. Используйте CAST () для целых чисел или в SQL2012 или выше используйте оператор CONCAT ().
  • Ссылки на таблицы в других базах данных. Видимо проблема с разрешениями. Я не смог решить эту проблему.
  • Любой прямой или косвенный вызов XP_CMDSHELL. Я не смог решить эту проблему.
  • Любая синтаксическая ошибка при прямых или косвенных вызовах других хранимых процедур. Исправить звонок в ИП.
  • Temp Tables. Заменить временную таблицу переменной таблицы.
  • SET QUOTED_IDENTIFIER OFF используется, но редактируемая таблица имеет индексированное представление. * Измените оператор set на SET QUOTED_IDENTIFIER ON. *
8 голосов
/ 12 августа 2011

Причина: ваша хранимая процедура будет возвращать сложный тип.то есть несколько результатов или использует временную таблицу.

Разрешение

Это полностью зависит от того, что делает ваша хранимая процедура.Полезные ссылки

  1. http://odetocode.com/code/365.aspx
  2. http://riteshkk2000.blogspot.com/2010/08/error-unknown-return-type-return-types.html
7 голосов
/ 20 декабря 2011

На случай, если кто-то еще столкнется с этим, я только что сам испытал это.

В моем случае я ссылался на таблицу в инструкции вставки, которой больше не было в моей схеме. При ближайшем рассмотрении моего кода выяснилось, что я вставляю таблицу с именем «Account», которая теперь называется «tblAccount». Visual Studio не выдавал ошибок при сохранении sp, но я столкнулся с той же ошибкой при попытке добавить sp в файл dbml.

Надеюсь, это поможет кому-то еще.

5 голосов
/ 20 января 2015

У меня тоже была проблема (VS 2012, SQL Server 2008R2).В моем случае это была комбинация оператора + и различных операторов CAST в коде.Я не нашел способа заменить их чем-то, что нравится VisualStudio, но я нашел обходной путь:

Обходной путь "Dummy SELECT" :

  • Создайте фиктивную инструкцию SELECT со всеми полями, которые нужно вернуть.Например:
    select 'bla bla' as field1, 123123 as field2, 'asñfs' as field3
  • Закомментируйте ваш SP-код и просто оставьте фиктивный SELECT в вашем SP.
  • Добавьте ваш SP в конструкторе O / R и сохраните(он должен знать об этом без сообщения об ошибке)
  • Восстановить исходный SP (оставьте фиктивный SELECT в качестве комментария для будущего использования)
5 голосов
/ 11 октября 2011

У меня тоже была эта проблема - пришлось закомментировать код, который строил многоугольник:

declare
    @MapBounds geography
    ;

select
    @MapBounds = geography::STGeomFromText('POLYGON((' + 
        cast(@NorthEastLng as varchar) + ' ' + cast(@NorthEastLat as varchar) + ', ' +  
        cast(@SouthWestLng as varchar) + ' ' + cast(@NorthEastLat as varchar) + ', ' +  
        cast(@SouthWestLng as varchar) + ' ' + cast(@SouthWestLat as varchar) + ', ' +  
        cast(@NorthEastLng as varchar) + ' ' + cast(@SouthWestLat as varchar) + ', ' + 
        cast(@NorthEastLng as varchar) + ' ' + cast(@NorthEastLat as varchar) + 
        '))', 4326)
    ;

Как только он был добавлен в dmbl, я откомментировал код, и он работал как чемпион!

3 голосов
/ 10 октября 2013

Вы можете также рассмотреть возможность использования метода CONCAT () вместо '+' для конкатенации строки. Так как я не использовал временную таблицу и все же столкнулся с этой проблемой. Я обнаружил, что объединяющие строки, использующие '+', вызывают это.

В моем случае я использовал это:

SET @errorMessage = CONCAT('Update (ID=', @pnID, ') failed. Name already exists.');

Вместо:

SET @errorMessage = 'Update (ID=' + @pnID + ') failed. Name already exists.';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...