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

Откуда:
Сообщений: 378
Доброго дня всем!
Пытаюсь выполнить процедуру CheckParent, подставив в нее параметр @ID
SELECT  @ID exec  sp_executesql @CheckUser 
SELECT @CheckUserPlaceVal exec   CheckParent @ID

Не работает... Как правильно подставить параметр @ID
31 янв 12, 12:33    [12002467]     Ответить | Цитировать Сообщить модератору
 Re: передать параметр процедуре  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
exec   CheckParent @ID
31 янв 12, 12:34    [12002476]     Ответить | Цитировать Сообщить модератору
 Re: передать параметр процедуре  [new]
nickolay_fff
Member

Откуда:
Сообщений: 378
exec   CheckParent @ID
возвращает NULL, а если
exec   CheckParent '3035'
, тогда работает
31 янв 12, 12:52    [12002635]     Ответить | Цитировать Сообщить модератору
 Re: передать параметр процедуре  [new]
Glory
Member

Откуда:
Сообщений: 104751
nickolay_fff
возвращает NULL, а если

А @ID наверное задекларирована как declare @ID varchar ?
31 янв 12, 12:53    [12002656]     Ответить | Цитировать Сообщить модератору
 Re: передать параметр процедуре  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
nickolay_fff
exec   CheckParent @ID
возвращает NULL, а если
exec   CheckParent '3035'
, тогда работает
Ну так надо наверное переменной @id нужное значение присвоить сначала?
31 янв 12, 12:53    [12002661]     Ответить | Цитировать Сообщить модератору
 Re: передать параметр процедуре  [new]
nickolay_fff
Member

Откуда:
Сообщений: 378
мне казалось, что @ID отсюда берется
SELECT  @ID exec  sp_executesql @CheckUser 
31 янв 12, 13:03    [12002827]     Ответить | Цитировать Сообщить модератору
 Re: передать параметр процедуре  [new]
Glory
Member

Откуда:
Сообщений: 104751
nickolay_fff
мне казалось, что @ID отсюда берется

Именно, что показалось
31 янв 12, 13:05    [12002849]     Ответить | Цитировать Сообщить модератору
 Re: передать параметр процедуре  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31994
nickolay_fff
мне казалось, что @ID отсюда берется
SELECT  @ID exec  sp_executesql @CheckUser 
SELECT @ID - это операция, возвращающая клиентскому приложению таблицу с одой строкой и с одним полем @ID

exec sp_executesql @CheckUser - это вызов процедуры sp_executesql, которая батч, находящийся в строке @CheckUser

2 совершенно разных операции.
31 янв 12, 13:06    [12002870]     Ответить | Цитировать Сообщить модератору
 Re: передать параметр процедуре  [new]
nickolay_fff
Member

Откуда:
Сообщений: 378
Котел не варит. А как тогда присвоить @ID?
31 янв 12, 13:17    [12003064]     Ответить | Цитировать Сообщить модератору
 Re: передать параметр процедуре  [new]
Glory
Member

Откуда:
Сообщений: 104751
SET @ID = 'AAA'
31 янв 12, 13:19    [12003104]     Ответить | Цитировать Сообщить модератору
 Re: передать параметр процедуре  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
И вообще, что внутри @CheckUser?
И как выглядит CheckParent?
Каков результат её выполнения?
31 янв 12, 13:22    [12003149]     Ответить | Цитировать Сообщить модератору
 Re: передать параметр процедуре  [new]
nickolay_fff
Member

Откуда:
Сообщений: 378
Это понятно, но @ID -это результат выполнения запроса @CheckUser
31 янв 12, 13:22    [12003151]     Ответить | Цитировать Сообщить модератору
 Re: передать параметр процедуре  [new]
nickolay_fff
Member

Откуда:
Сообщений: 378
SET @CheckUser= N'SELECT tblAssets.GroupID  FROM tblAssets  where tblAssets.assetsname='+REPLACE(''''+@userinit+'''',' ','')


USE [el_dnevn]
GO
/****** Object:  StoredProcedure [dbo].[CheckParent]    Script Date: 01/31/2012 15:22:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

--set nocount on
CREATE   proc [dbo].[CheckParent]
(@ID int)


AS set nocount on

BEGIN 

	declare @Ret int

	declare @ParentID int

	select @Ret = [GroupID], @ParentID = ParentID

	from TblAssetsGroups where [GroupID] = @ID

	if @ParentID is null return @Ret

	while @ParentID <> 0 begin

		select @Ret = [GroupID], @ParentID = ParentID

		from TblAssetsGroups where [GroupID] = @ParentID 

return @Ret
end


END
31 янв 12, 13:25    [12003185]     Ответить | Цитировать Сообщить модератору
 Re: передать параметр процедуре  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
nickolay_fff
Это понятно, но @ID -это результат выполнения запроса @CheckUser
sp_executesql с OUTPUT-параметрами
31 янв 12, 13:25    [12003190]     Ответить | Цитировать Сообщить модератору
 Re: передать параметр процедуре  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
nickolay_fff,

вообще говоря, это нехорошо - возвращать результат таким образом.
Хороший тон - OUTPUT-параметры.
Можно также рассмотреть возможность использования функций
и даже рекурсивного CTE, если версия сервера позволяет.
31 янв 12, 13:29    [12003251]     Ответить | Цитировать Сообщить модератору
 Re: передать параметр процедуре  [new]
Glory
Member

Откуда:
Сообщений: 104751
nickolay_fff
SET @CheckUser= N'SELECT tblAssets.GroupID  FROM tblAssets  where tblAssets.assetsname='+REPLACE(''''+@userinit+'''',' ','')

И зачем тут динамический запрос спрашивается ?
31 янв 12, 13:30    [12003263]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить