Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 хранимая процедура c обработкой пустого входного параметра  [new]
juliaSt
Member

Откуда:
Сообщений: 59
Необходимо написать хранимую процедуру которая вернет название кампании по id покупателя

create procedure dbo.CustComp
(
@CustomerID nchar(5)=0
)
as
set nocount on
if @CustomerID=0 set @CustomerID = null 
else begin
select CompanyName 
from Northwind.dbo.Customers 
where CustomerID=@CustomerID
if @CustomerID IS NULL
	begin 
		raiserror('Введите верный номер клиента: ',15,1 ) return -100 
	end 
set nocount off
end


проверяю так :(FISSA там есть) тип столбца CustomerID как в процедуре nchar(5)
exec dbo.CustComp @CustomerID='FISSA'


Непонятно почему "Conversion failed when converting the nvarchar value 'FISSA' to data type int." пытается конвертить в int

а на это успешно выполняется но не выводит моего сообщения
exec dbo.CustComp


И ещё вопрос: чтоб процедура возвращала что-то обязательно переменную out делать? В примерах есть без out и в описание написано, что что-то возвращает?
26 июн 12, 11:52    [12775420]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура c обработкой пустого входного параметра  [new]
Glory
Member

Откуда:
Сообщений: 104751
juliaSt
Непонятно почему "Conversion failed when converting the nvarchar value 'FISSA' to data type int." пытается конвертить в int

Потому что вы написали if @CustomerID=0
26 июн 12, 11:55    [12775443]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура c обработкой пустого входного параметра  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
juliaSt
Непонятно почему "Conversion failed when converting the nvarchar value 'FISSA' to data type int." пытается конвертить в int

Потому что "if @CustomerID=0".

juliaSt
И ещё вопрос: чтоб процедура возвращала что-то обязательно переменную out делать? В примерах есть без out и в описание написано, что что-то возвращает?
Можно вернуть рекордсет. Можно вернуть return'ом, но только значение типа int.

Сообщение было отредактировано: 26 июн 12, 11:56
26 июн 12, 11:55    [12775446]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура c обработкой пустого входного параметра  [new]
Sack
Member

Откуда:
Сообщений: 163
juliaSt,

наверное потому, что CustomerID целочисленного типа, а 'FISSA' нет.
'0' преобразуется в int неявно.
26 июн 12, 11:56    [12775455]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура c обработкой пустого входного параметра  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
juliaSt,

А почему
@CustomerID nchar(5)=0
. Нельзя int поставить?
26 июн 12, 12:01    [12775485]     Ответить | Цитировать Сообщить модератору
 Re: хранимая процедура c обработкой пустого входного параметра  [new]
juliaSt
Member

Откуда:
Сообщений: 59
спасибо за рекомендации, убрала лишнее, теперь все ок

create procedure dbo.CustComp
(
@CustomerID nchar(5)=null
)
as
set nocount on
if @CustomerID IS not NULL 
begin
	select CompanyName 
	from Northwind.dbo.Customers 
	where CustomerID=@CustomerID
end
else 
	begin 
		raiserror('Введите верный номер клиента: ',15,1 ) return -100 
	end
set nocount off
26 июн 12, 12:03    [12775500]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить