хранимая процедура не выполняет ASP .NEt - PullRequest
0 голосов
/ 03 августа 2011

У меня есть приложение .net, которое вызывает хранимую процедуру (SQL Server 2008). Сбой вызова SP с сообщением об ошибке

"Подзапрос возвратил более 1 значения. Это не разрешено, когда подзапрос следует =,! =, <, <=,>,> = или когда подзапрос используется как выражение. "

но когда я вручную запускаю SP из клиента SQL Server 2008 с теми же параметрами, что и выше, у меня нет проблем.

Может ли кто-нибудь помочь исправить это?

По соображениям безопасности я не могу разместить свой SP здесь.

Ответы [ 2 ]

0 голосов
/ 03 августа 2011

Похоже на описанную проблему здесь .

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

Возможно, у вас есть что-то вроде:

declare @XYZ int
select @XYZ = FieldA from inserted

Если ваше обновление изменяет более одной записи, то это утверждение завершится ошибкой с вашим сообщением об ошибке.

Там нетпричина, по которой работа в SSMS не приведет к сбою по сравнению с ASP.NET, если только сам SP не проверит значения окружения, например, текущего пользователя из функции suser_sname (), и поэтому может не вносить никаких изменений из-за этих значений и, следовательно, не запускать триггер.1012 *

Если у вас нет триггеров, поищите примеры приведенного выше примера запроса и дважды проверьте, что они никогда не смогут вернуть более одного значения.

0 голосов
/ 03 августа 2011

если ваша хранимая процедура возвращает значение и вы хотите получить это значение, вам нужно использовать SET NOCOUNT ON в первых строках процедуры.

РЕДАКТИРОВАТЬ: извините, я не понял вопросы.Ответ неверный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...