存储过程仅在SSMS中完全有效

时间:2017-10-22 19:49:04

标签: sql-server stored-procedures sql-update

我有一个非常简单的检查过程,它接受逗号分隔的字符串,并验证具有该键的记录是否具有正确的状态。在过程结束时,将使用逗号分隔的字符串,字符串中的项目计数和所做的更新计数创建审计。审核始终反映0次更新。但是,当我使用与运行该过程的作业相同的登录在SSMS中运行该过程时,我得到更新。我知道有一些简单的事情发生但看不到它。例程在下面指定

BEGIN
SET NOCOUNT ON;

declare @loads Table(shipmentnumber varchar(20))
declare @passinfo Table (ID int, fieldname varchar(50), field nvarchar(max)) 


select @info = replace(@info, '"','')

declare @cnt1 int, @cnt2 int, @error varchar(100)
insert into @loads 
select rtrim(ltrim(splitdata)) from dbo.fnsplitstring(@info, ',')

set @cnt1 = @@rowcount


update loads 
set loadstatus = 102 
where shipmentnumber in (select shipmentnumber from @loads)
and loadstatus <> 102

set @cnt2 = @@rowcount

INSERT INTO [dbo].[ShipperSPAudit]
       ([SP]
       ,[parm1]
       ,[parm2],parm3,parm4
       ,[requesteddate]
       , userid)
 VALUES
       ('CPCheckCancel'
       ,cast(@shipper as varchar)
       ,@info, cast(@cnt1 as varchar), cast(@cnt2 as varchar)
       ,getdate()
       ,@userid)

END

1 个答案:

答案 0 :(得分:0)

我没有合理的解释为什么它在SSMS中起作用而不是作为预定的工作。从dbo.fnsplitstring(@ info,',')更改了选择rtrim(ltrim(splitdata))的代码行,从dbo.fnsplitstring(@info,',')中选择子字符串(splitdata,1,8)为我知道传入的逗号分隔字段长度应为8个字符。代码现在在作为作业运行和在SSMS中运行时有效。