2017-09-14 47 views
0

这是我下面的SQL代码: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,但只是普通的没什么。如果发生这种情况,整个代码块将返回一个NULL,而不是留下空白并继续。这是我试图用我加

ISNULL部分

长话短说:我需要处理,如果存在我的Stationery[Order]表无数据,避免整件事返回NULL

+0

使用'CONCAT'代替。 – lad2025

回答

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)) ,'') + 
+0

不知道我可以做到这一点。完善! – Evohc

相关问题