简体   繁体   English

从另一个服务器调用时,存储过程返回不同的结果

[英]Stored procedure returns different results when called from another server

I have created a stored procedure in Server1 that is returning the correct results Then on Server2 I just execute the Server1 stored procedure by linked server. 我在Server1中创建了一个存储过程,该存储过程返回正确的结果。然后在Server2上,我仅通过链接服务器执行Server1存储过程。

At first the return results at Server2 are the same as Server1. 首先,Server2的返回结果与Server1相同。

But after 1 or 2 days, Server2 returns some null values in some of the data. 但是在1或2天后,Server2在某些数据中返回一些空值。 But Server1 is still returning the correct results. 但是Server1仍返回正确的结果。

Result Server1: 结果服务器1:

Id  Name       Location     Age
1   Alex       USA          20
2   Bob        UK           23
3   David      JP           25
4   Don        UK           24

Result Server2: 结果服务器2:

Id  Name       Location     Age
1   Alex       USA          20
2   Bob        NULL         NULL
3   David      NULL         NULL
4   Don        UK           24

I'm only able to temporally resolve this by recompile the Server1 stored procedure. 我只能通过重新编译Server1存储过程来暂时解决此问题。 Than the Server2 will get the correct result, but after 2 days later the same problem occur again. 比Server2将获得正确的结果,但是两天后,同样的问题再次发生。

20190920 update..... include the sample of store procedure query FYI: Some NULLvalue appear in those column CASE statement 20190920更新.....包括存储过程查询样本:仅供参考:在这些列的CASE语句中出现一些NULLvalue

 all the @... is input @output is declare as Table. above here is a lot of insert statement into the @Output table SELECT * FROM ( SELECT tbla.SiteName,tbla.FromWorkCenter ,tbla.Category,tbla.MaterialName,tbla.OperSeq ,tbla.FromOperSeq,tbla.StepIndex,tbla.FromStepIndex,SUM(tbla.CFqty) CFQty FROM ( SELECT tbl.SiteName ,CASE WHEN tbl.RouteName like '%REWORK%' THEN 'PS-'+tbl.ToWorkCenter WHEN isnull(tbl.FromWorkCenter,'WRH')='WRH' THEN (Select CASE Source WHEN 'TWH' THEN 'TWH' WHEN 'LWH' THEN 'LWH' ELSE 'WRH' END AS Source from DIM_MATERIAL ddm WHERE ddm.MaterialName=tbl.MaterialName AND ddm.MainCategory_wk = (SELECT TOP 1 dc.key_wk FROM DIM_Category dc WHERE dc.Category=TBL.Category)) else 'PS-'+dw.WorkCenterName END AS FromWorkCenter ,Category ,tbl.MaterialName,tbl.RouteName ,CASE tbl.OperSeq WHEN '0' THEN '10' ELSE tbl.OperSeq END AS OperSeq ,CASE rsd2.OperSeq WHEN '0' THEN '10' ELSE rsd2.OperSeq END AS FromOperSeq ,CASE WHEN rsd.RouteName LIKE '%REWORK%' THEN ( SELECT TOP 1 c.StepIndex FROM DIM_MATERIAL a JOIN DIM_MaterialStructure b on a.Key_wk=b.Material_wk JOIN DIM_ROUTESTEPDETAIL c on b.RouteName=c.RouteName and c.OperSeq=tbl.OperSeq and OperSeqFlag='TRUE' join AUDIT_JOB d on b.audit_id = d.audit_id and d.post_end_dt <= @Date WHERE a.MaterialName=tbl.MaterialName ORDER BY d.post_end_dt desc ) ELSE rsd.StepIndex end StepIndex ,CASE WHEN rsd.RouteName LIKE '%REWORK%' THEN ( SELECT TOP 1 c.StepIndex FROM DIM_MATERIAL a JOIN DIM_MaterialStructure b on a.Key_wk=b.Material_wk JOIN DIM_ROUTESTEPDETAIL c on b.RouteName=c.RouteName and c.ToOperSeq=tbl.OperSeq and OperSeqFlag='TRUE' join AUDIT_JOB d on b.audit_id = d.audit_id and d.post_end_dt <= @Date WHERE a.MaterialName=tbl.MaterialName ORDER BY d.post_end_dt desc ) ELSE rsd2.StepIndex end FromStepIndex ,(SUM(BFQty)+SUM(RtnFromQty)+SUM(RecQty)-SUM(IssueQty)-SUM(RtnToQty)-(SUM(RejQty))+SUM(TrnQty)+SUM(AdjQty)+SUM(SCQty)) AS CFQty FROM @Output TBL JOIN DIM_MATERIAL DM ON TBL.MaterialName=dm.MaterialName AND dm.MainCategory_wk = (SELECT TOP 1 dc.key_wk FROM DIM_Category dc WHERE dc.Category=TBL.Category) LEFT JOIN DIM_ROUTESTEPDETAIL rsd ON rsd.RouteName=tbl.RouteName AND rsd.OperSeq=CASE tbl.OperSeq WHEN '0' THEN '0' ELSE tbl.OperSeq END AND OperSeqFlag='TRUE' AND rsd.Site= @Company LEFT JOIN DIM_ROUTESTEPDETAIL rsd2 ON rsd2.RouteName=tbl.RouteName AND rsd2.ToOperSeq=CASE tbl.OperSeq WHEN '0' THEN '0' ELSE tbl.OperSeq END AND rsd2.OperSeqFlag='TRUE' AND rsd2.Site = CASE tbl.SiteName WHEN 'SIS' THEN 'SIS' ELSE 'INT' END LEFT JOIN DIM_WORKCENTER DW ON rsd.WorkCenter_wk=dw.key_wk WHERE tbl.SiteName=@Site GROUP BY tbl.SiteName, tbl.FromWorkCenter ,tbl.Category ,tbl.MaterialName ,tbl.RouteName,tbl.OperSeq, tbl.StepIndex,dm.Key_wk,rsd.StepIndex,tbl.RouteName, tbl.Material_WK,rsd2.OperSeq,rsd2.StepIndex,dw.WorkCenterName,tbl.ToWorkCenter, rsd.RouteName ) tbla where tbla.CFQty<>0 GROUP BY tbla.SiteName, tbla.FromWorkCenter, tbla.Category ,tbla.MaterialName,tbla.OperSeq,tbla.FromOperSeq,tbla.StepIndex,tbla.FromStepIndex ) b where b.CFQty<>0 ORDER BY b.MaterialName ,b.OperSeq ,b.SiteName ,b.FromWorkCenter ,b.Category ,b.FromOperSeq ,b.StepIndex ,b.FromStepIndex 

I have found the problem. 我发现了问题。 it turn out to be the data sequence is different when query from local and remotely 事实证明,从本地和远程查询时,数据顺序不同

Result Server1: 结果服务器1:

Seq Name       Location     Category
1   Bob        UK           20
2   Bob        UK           23

Result Server2: 结果服务器2:

Seq Name       Location     Category
1   Bob        UK           23
2   Bob        UK           20

So when filtering some data is not joined properly as result null 因此,在过滤某些数据时,由于结果为null,因此未正确加入

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何抑制从 SQL Server 中的另一个存储过程调用的存储过程的 SELECT 输出? - How to Suppress the SELECT Output of a Stored Procedure called from another Stored Procedure in SQL Server? 在另一个存储过程中使用一个存储过程的结果-SQL Server - Using results of one stored procedure in another stored procedure - SQL Server 当被另一个存储过程调用时,存储过程未返回正确的值 - Stored procedure not returning correct value when called by another stored procedure 当单个过程在另一个存储过程中被多次调用时,SQL Server代码优化 - SQL Server code optimization when a single procedure gets called multiples times inside another stored procedure 从另一个存储过程的结果中设置存储过程中的变量 - Set variables from stored procedure from results of another stored procedure 从另一个存储过程调用存储过程不会产生结果 - Calling a stored procedure from another stored procedure does not produce results 更改存储过程以包括来自另一个存储过程/查询的结果 - altering a stored procedure to include results from another stored procedure/query SQL 服务器:如何使用 SQL 过程的结果作为另一个存储过程的参数 - SQL Server: how to use the results from a SQL procedure as a parameter for another stored procedure 从另一个存储过程 SQL Server 调用存储过程 - Calling stored procedure from another stored procedure SQL Server 具有varchar参数的SQL Server存储过程返回错误结果 - SQL Server Stored Procedure with varchar parameter returns wrong results
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM