2017-09-14 1 views
0

Das ist mein SQL-Code unten:SQL Server Handle Keine Daten in einigen Fällen

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) 

Das Problem aus dem folgenden Abschnitt des Codes kommt, die manchmal wegen nicht vorhandener Daten fehlschlägt:

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) 

Im obigen Code ist FrontTemplate_Id immer ausgefüllt, aber BackTemplate_Id ist manchmal NULL, was bedeutet, dass in den anderen Tabellen keine Daten vorhanden sind. Nicht NULL, aber einfach NICHTS. Wenn dies der Fall ist, gibt der gesamte Codeblock eine NULL zurück, anstatt nur ein Leerzeichen zu lassen und fortzufahren. Das ist, was ich mit dem ISNULL Teil habe ich versucht,

Lange Rede kurzer hinzugefügt: Ich brauche zu behandeln, wenn keine Daten für meine Stationery und [Order] Tabellen vorhanden ist, und zu vermeiden, dass die ganze Sache ein NULL zurück.

+0

Verwenden 'CONCAT' statt. – lad2025

Antwort

1

müssen Sie ISNULL auf der Unterabfrage nicht nur auf ausgewählte Spalte verwenden -

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

War mir nicht bewusst, dass ich das tun könnte. Perfekt! – Evohc

Verwandte Themen