2016-07-05 34 views
0

我有我使用來獲取其具有設置爲如NULL''以下列中的至少一個記錄其下面的查詢:SQL得到它們是空字段/空對返回的每條記錄

  • MainImage
  • 摘要
  • 說明

    DECLARE @missingFields varchar(100) 
    SET @missingFields = '' 
    
    SELECT 
    
    c.[UnitReference] as 'UnitRef', 
    t.[NodeName] as 'Property', 
    @missingFields as 'Field/s missing' 
    
    FROM [DetailPage] d 
    INNER JOIN [CRM] c 
    ON d.ItemID = c.ItemID 
    INNER JOIN 
    [Tree] t 
    ON d.[ID] = t.[ID] 
    
    WHERE (ISNULL(d.MainImage, '') = '' OR ISNULL(d.Summary,'') = '' OR ISNULL(d.[Description],'') = '') 
    AND c.[IsListed] = 1 AND c.[IsMarketed] = 1 
    

這會返回我想要的數據,但是我還需要建立一個字符串,列出返回的記錄中哪些列爲空或空的列。 "Main Image is empty, Description is empty"當記錄有空時MainImageDescription列。

我已經試過:

@missingFields = CASE WHEN ISNULL(MainImage, '') = '' THEN 'Main image is null' ELSE '' END -- etc... 

但我不能與數據檢索操作包括這一點。我會如何去做這件事?

+0

其中一個字段總是空嗎?也可以多個字段爲空? – scsimon

+0

爲什麼需要一個變量?你不能只用案例陳述嗎?你想要最多3種不同的狀態嗎?例如'case when isnull(d.mainimage,'')=''then'Main Image is Null'end &case when isnull(d.Description,'')=''then'Description is Null'end as [領域失蹤]'? – xQbert

+0

字段不保證爲空。對於記錄來說,多個字段可以爲空。 – DGibbs

回答

2
SELECT c.[UnitReference] AS 'UnitRef', 
      t.[NodeName] AS 'Property', 
      (CASE 
       WHEN d.MainImage IS NULL 
       THEN 'Main Image is Null, ' 
       WHEN d.MainImage = '' 
       THEN 'Main Image is Empty, ' 
       ELSE '' 
      END)+ 
      (CASE 
       WHEN d.Summary IS NULL 
       THEN 'Summary is Null, ' 
       WHEN d.Summary = '' 
       THEN 'Summary is Empty, ' 
       ELSE '' 
      END)+ 
      (CASE 
       WHEN d.[Description] IS NULL 
       THEN 'Description is Null, ' 
       WHEN d.[Description] = '' 
       THEN 'Description is Empty, ' 
       ELSE '' 
      END) AS MissingFields 
    FROM [DetailPage] d 
    INNER JOIN [CRM] c 
    ON d.ItemID = c.ItemID 
    INNER JOIN [Tree] t 
    ON d.[ID] = t.[ID] 
    WHERE(d.MainImage IS NULL OR d.MainImage = '') 
    OR (d.Summary IS NULL OR d.Summary = '') 
    OR (d.[Description] IS NULL OR d.[Description] = '') 
    AND c.[IsListed] = 1 
    AND c.[IsMarketed] = 1 
+0

嗯。我認爲這基本上是正確的方法,但是如果某些感興趣的列是空/空而其他不是,那麼這個特定查詢會發生什麼?難道你不會把'MissingFields'評估爲'NULL'嗎? –

+0

@John是的,這就是我目前正在得到的 – DGibbs

+1

'CASE'表達式需要一個產生空字符串或空字符串的ELSE子句。 –