SQL Server在某些情况下不处理数据
下面是我的sql代码:SQL Server在某些情况下不处理数据,sql,sql-server,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
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\u Id
始终填充,但BackTemplate\u Id
有时为NULL
,这意味着其他表中没有数据。不是空的,只是没有。如果发生这种情况,整个代码块将返回一个NULL
,而不是只留下一个空白并继续。这就是我在第一部分添加的ISNULL
中尝试的
长话短说:我需要处理我的
信纸
和[Order]
表是否不存在数据,并避免整个过程返回NULL您需要在子查询上使用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)) ,'') +
改用CONCAT
。我不知道我能做到。很 完美!