SQL Server在某些情况下不处理数据

时间:2017-09-14 15:40:06

标签: sql sql-server

这是我的下面的SQL代码:

SELECT 'Template Name: ' + (SELECT Template.TemplateName FROM Stationery INNER JOIN Template ON
            Template.Template_Id=Stationery.FrontTemplate_Id INNER JOIN [Order] ON
            [Order].Stationery_Id=Stationery.Stationery_Id
            WHERE [Order].Order_Id in (9513)) + 
    ' | Back Template: ' + (SELECT ISNULL(Template.TemplateName, '') FROM Stationery INNER JOIN Template ON
                    Template.Template_Id=Stationery.BackTemplate_Id INNER JOIN [Order] ON
                    [Order].Stationery_Id=Stationery.Stationery_Id
                    WHERE [Order].Order_Id in (9513)) +
    ' Other Information : ' + (SELECT CONVERT(NVARCHAR(MAX), OtherInformation) 
                    FROM Template INNER JOIN [Order] 
                    ON Template.TemplateName=[Order].ProductName 
                    WHERE [Order].Order_Id in (9513)) +
    ' User Comments: ' + (SELECT ISNULL(CONVERT(NVARCHAR(MAX), [Order].IndividualComments),'')
                    FROM [Order] WHERE [Order].Order_Id in (9513))
FROM [Order] WHERE [Order].Order_Id in (9513)

问题来自代码的以下部分,由于不存在数据,有时会失败:

SELECT ISNULL(Template.TemplateName, '') FROM Stationery INNER JOIN Template ON
Template.Template_Id=Stationery.BackTemplate_Id INNER JOIN [Order] ON
[Order].Stationery_Id=Stationery.Stationery_Id
WHERE [Order].Order_Id in (9513)

在上面的代码中,FrontTemplate_Id总是被填充,但BackTemplate_Id有时是NULL,这意味着其他表中没有数据。不是NULL,但只是简单的NOTHING。如果发生这种情况,整个代码块将返回NULL,而不是仅留下空白并继续。这是我尝试使用ISNULL部分添加的内容

长话短说:如果我的Stationery[Order]表中没有数据,我需要处理,并避免返回NULL整个事件。

1 个答案:

答案 0 :(得分:1)

您需要在子查询上使用ISNULL,而不仅仅是在所选列 -

 SELECT 'Template Name: ' + ISNULL( (SELECT Template.TemplateName FROM 
 Stationery INNER JOIN Template ON
        Template.Template_Id=Stationery.FrontTemplate_Id INNER JOIN [Order] ON
        [Order].Stationery_Id=Stationery.Stationery_Id
        WHERE [Order].Order_Id in (9513))  ,'') +