Sql server 使用“exec”更新表

Sql server 使用“exec”更新表,sql-server,exec,temp-tables,Sql Server,Exec,Temp Tables,我有一个名为temp的temp表,有两列: clientID (varchar), result (int) 我只想在其中循环并使用一个存储过程检查clientID,该存储过程接受2个varchar参数并返回0或1 我编码: update #temp set result=exec sp_x 'clientID' '@clientID' clientID是临时的列名。 @clientID来自主SP的参数 它提出了一个警告: 关键字“exec”附近的语法不正确 那么,该怎么办 提前感谢…您需

我有一个名为temp的temp表,有两列:

clientID (varchar), 
result (int)
我只想在其中循环并使用一个存储过程检查clientID,该存储过程接受2个varchar参数并返回0或1

我编码:

update #temp set result=exec sp_x 'clientID' '@clientID'
clientID是临时的列名。 @clientID来自主SP的参数

它提出了一个警告:

关键字“exec”附近的语法不正确

那么,该怎么办


提前感谢…

您需要在循环中调用您的过程

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

不能将存储过程用作update语句的值。老实说,如果您的存储过程返回这样的值,那么您就是做错了。过程的返回旨在指示执行状态,而不是返回值。如果希望返回值,则应使用输出参数。我有一种感觉,通过修改该过程并完全摆脱循环,整个过程可以大大改进。如果你能发布更多细节,我会帮你弄清楚。这是我调用的第个SP:创建过程[dbo]。SP_CrossCheck2@clientID varchar16,@mainID varchar16作为declare@sql nvarcharmax;声明@sqlMain nvarcharmax;声明@Params nvarcharmax;set@sql=N'从sql中选择@sqlMainOUT=sql,其中clientID='+@clientID set@Params=N'@sqlMainOUT-nvarcharmax-OUTPUT';EXEC sp_executesql@sql,@Params,@sqlMainOUT=@sqlMain输出;创建表temp clientID varchar16,结果int默认值0插入temp exec sp_executesql@sqlMain如果@mainID在select clientID from temp select 1中,否则选择0对不起格式。我是个新手。当我在查询中执行此SP时,其结果为0或1。那你觉得呢?提前感谢……您应该看看这篇文章,因为您是用sp_uu前缀命名您的过程的。谢谢你。那些代码对我来说是很新的。我只是想了解:你在这里没有提到临时工。那么,活套是否会检测到clientID和temp的结果,或者如何检测?谢谢。哦,对了。我错过了。请看我编辑的代码。