【问题标题】:How to update status for part with nothing data when this part is missed?当这部分丢失时,如何更新没有任何数据的部分的状态?
【发布时间】:2020-12-12 15:18:34
【问题描述】:

我使用 SQL Server 2012 并遇到一个问题:我无法更新状态并没有返回数据,而选择语句交叉应用函数没有返回结果。

意思是当连接零件和公司时没有返回数据,然后在数据丢失时将状态更新到该零件,该零件没有任何数据。

create table #TempPC   
(  
    PartNumber NVARCHAR(300),  
    CompanyId INT,  
    Status NVARCHAR(200)  
)  

INSERT INTO #TempPC (PartNumber, CompanyId)   
VALUES ('9C06031A2R43FKHFT', 1233345),  
       ('VJ0805AIR5CXAMT', 8433324)

当我运行如下所示的选择时,它不会返回某些部分的数据,因此我将更新状态,并且没有任何数据返回到该部分:

SELECT 
    t.PartNumber, t.CompanyName, pc.FamilyName, t.Status 
FROM  
    #TempPC t    
CROSS APPLY
    [PC].FN_PartCheck_Test (t.[PartNumber], 0, 1, 1, t.CompanyId) pc     
WHERE 
    pc.GroupID > -2 AND pc.PortionID > -2  

当临时表上的任何部分和公司与函数连接丢失时,我需要做什么,然后将状态更新到该部分,而这部分没有任何数据。

预期结果:

PartNumber            CompanyId     status  
---------------------------------------------------------
9C06031A2R43FKHFT     1233345       No data returned  
VJ0805AIR5CXAMT       8433324       it have data returned  

请问该怎么做?

SELECT * 
FROM [PC].FN_PartCheck_Test (t.[PartNumber], 0, 1, 1, t.CompanyId) pc  

RETURN ID PartNumber, CompanyID, FamilyID   

【问题讨论】:

    标签: sql tsql stored-procedures sql-server-2012 sql-function


    【解决方案1】:

    如果我理解正确,你想要outer apply,但你还需要一个子查询:

    Select t.PartNumber, t.CompanyName, pc.FamilyName, t.Status
    from  #TempPC t outer apply 
          (select pc.*
           from [PC].FN_PartCheck_Test( t.[PartNumber], 0, 1, 1, t.CompanyId) pc     
           where pc.GroupID > -2 And pc.PortionID > -2 
          ) pc ;
    

    【讨论】:

    • @ahmedbarbary 如果答案是您想要的,最好将其标记为答案并点赞。
    猜你喜欢
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2021-06-27
    • 1970-01-01
    • 2020-11-05
    相关资源
    最近更新 更多