2016-06-08 4 views
-1

У меня есть временная таблица с именем, как #temp с 2-мя столбцы:Использования «Exec» для обновления таблицы

clientID (varchar), 
result (int) 

Я просто хочу, чтобы петля в нем и проверить ClientId с хранимой процедурой, которая принимает 2 параметр VARCHAR и возвращает 0 или 1.

Я закодированы:

update #temp set result=exec sp_x 'clientID' '@clientID' 

clientID это имя столбца #temp.
@clientID происходит от параметра основного SP

Он приходит с предупреждением:

Неправильный синтаксис около «Exec» ключевых слов.

Итак, что делать?

Заранее спасибо ...

+0

Вы не можете использовать хранимую процедуру в качестве значения для оператора обновления. И честно, если ваша хранимая процедура возвращает такое значение, что вы делаете это неправильно. Возврат из процедуры предназначен для указания статуса выполнения, а не возврата значения. Если вы хотите вернуть значение, вы должны использовать выходной параметр. У меня такое чувство, что весь этот процесс можно значительно улучшить, изменив эту процедуру и полностью избавившись от цикла. Если вы можете опубликовать несколько подробностей, я помогу вам разобраться в этом. –

+0

Это вызов SP i: 'create procedure [dbo] .sp_CrossCheck2 (@clientID varchar (16), @mainID varchar (16)) AS declare @sql nvarchar (max); declare @sqlMain nvarchar (max); объявить @Params nvarchar (макс.); set @sql = N'select @sqlMainOUT = sql из sql где clientID = '+ @ clientID SET @Params = N' @ sqlMainOUT nvarchar (max) OUTPUT '; EXEC sp_executesql @sql, @Params, @ sqlMainOUT = @ sqlMain OUTPUT; создать таблицу #temp (ClientId VARCHAR (16), результат INT по умолчанию 0) вставки в #temp ехес sp_executesql @sqlMain если (@mainID в (выберите ClientId из #temp)) выберите 1 еще выбрать 0' –

+0

Извините за формат. Я любопытный новичок. Когда я выполняю этот SP в запросе, он приходит с результатом 0 или 1. Так что вы думаете? Спасибо заранее .... –

ответ

0

Вы должны вызвать вашу процедуру внутри цикла

declare @id varchar(10) 
declare @result int 
declare looper cursor for select clientID, result from #temp 

fetch next from looper 
into @id, @result 

-- loop on #temp table 
open looper 
while @@fetch_status = 0 
begin 
    -- call your procedure and store the result into a variable 
    -- do what ever you need to do 

end 

close looper 
deallocate looper 
+0

Спасибо FLICKER. Эти коды для меня очень новы. Я просто хочу понять, что: u не упоминал о #temp здесь. Так будет ли петлитель обнаруживать идентификатор clientID и результат #temp, или как это будет? Благодарю. –

+0

О, право. Я скучаю по этому. См. Код, который я редактировал. – FLICKER

Смежные вопросы