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

Откуда: Archangelsk, Russia
Сообщений: 32
Всем доброго времени суток!

Есть ХП

ALTER PROCEDURE dbo.GetAuthorization
(@comp varchar(150), @nickname varchar(50))
AS

Declare @depId integer

Declare @sqlt nvarchar(350)
BEGIN	
	Set @sqlt = 'Select @depId=Employee.DeptId from Employee where Employee.Username=' + @nickame
	exec sp_executesql @sqlt, N'@depId integer output', @depId output
END
return @depId

Вроде все делаю по уму, но в @depId увы ничего не записывается. Подскажите пожалуйста, где я ошибся?
2 авг 11, 01:38    [11056278]     Ответить | Цитировать Сообщить модератору
 Re: Снова про ХП, exec и параметры  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
А должно что-то записываться?

Сообщение было отредактировано: 2 авг 11, 01:40
2 авг 11, 01:40    [11056280]     Ответить | Цитировать Сообщить модератору
 Re: Снова про ХП, exec и параметры  [new]
JohnyMotorhead
Member

Откуда: Archangelsk, Russia
Сообщений: 32
как я рассуждал - да. я хочу возвращать клиенту значение переменной @depid.
2 авг 11, 01:46    [11056283]     Ответить | Цитировать Сообщить модератору
 Re: Снова про ХП, exec и параметры  [new]
Glory
Member

Откуда:
Сообщений: 104751
JohnyMotorhead
как я рассуждал - да. я хочу возвращать клиенту значение переменной @depid.

И где собственно проверка того, что "но в @depId увы ничего не записывается" ?
2 авг 11, 05:05    [11056366]     Ответить | Цитировать Сообщить модератору
 Re: Снова про ХП, exec и параметры  [new]
dymka
Member

Откуда: г. Альметьевск (Татарстан)
Сообщений: 235
1. Через параметр результата рекомендуют возвращать статус выполнения процедуры - код ошибки там или еще что. Свои параметры лучше возвращать через выходные параметры процедуры.
2. При построении динамического запроса - ошибка: @nickname не отбит кавычками: Employee.Username=''' + @nickame + ''''
3. Если это реальный пример, то прям так ли нужно динамическое построение запроса?

ALTER PROCEDURE dbo.GetAuthorization
  @comp varchar(150), 
  @nickname varchar(50),
  @depId integer output
as
begin
  
  select @depId=Employee.DeptId 
  from Employee 
  where Employee.Username = @nickname

-- тут можно проверить параметр @@rowcount на количество отфетченных записей, если 0, то никнейм не найден.
-- или установить @depId перед запросом в NULL и проверять потом.
  if @@rowcount = 1 
    return 0
  else 
    return 1
end

Ну как то так, более опытные товарищи подскажут, что тут еще можно придумать :)

4. Если приложение клиент-сервер, без средних звеньев итп, то можно воспользоваться стандартной системой авторизации и не передавать никнеймы итп.
2 авг 11, 07:29    [11056407]     Ответить | Цитировать Сообщить модератору
 Re: Снова про ХП, exec и параметры  [new]
Артем5
Guest
JohnyMotorhead,
Насколько я помню, то нужно так записать:
...
exec sp_executesql @sqlt, N'@depId integer output', @depId=@depId output
...
2 авг 11, 09:29    [11056585]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить