Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql nvarchar级联问题_Sql_Nvarchar - Fatal编程技术网

Sql nvarchar级联问题

Sql nvarchar级联问题,sql,nvarchar,Sql,Nvarchar,在处理了所有困难的事情之后,我可能正在尝试做一件简单的事情,但这似乎让我头疼。我试图将文本连接到变量@strXml中,该变量是用于构建Xml元素的nvarchar变量,但@strXml返回null。请帮忙。我在下面发布我的代码 DECLARE @strXml nvarchar(max) = '' SET @strXml = '<PromoName>' + (Select PromoName From #Temp) + '</PromoName>' SET @strXml

在处理了所有困难的事情之后,我可能正在尝试做一件简单的事情,但这似乎让我头疼。我试图将文本连接到变量@strXml中,该变量是用于构建Xml元素的nvarchar变量,但@strXml返回null。请帮忙。我在下面发布我的代码

DECLARE @strXml nvarchar(max) = ''
SET @strXml = '<PromoName>' + (Select PromoName From #Temp) + '</PromoName>' 
SET @strXml = @strXml + '<PromoDesc>' + (Select PromoDesc From #Temp) + '</PromoDesc>'
SET @strXml = @strXml + '<PromoCode>' + (Select PromoCode From #Temp) + '</PromoCode>' 
SET @strXml = @strXml + '<BeginDate>' + (Select Convert(nvarchar, BeginDate) From #Temp) + '</BeginDate>'
SET @strXml = @strXml + '<EndDate>' + (Select Convert(nvarchar, EndDate) From #Temp) + '</EndDate>'
SET @strXml = @strXml + '<RawHtml>' + (Select RawHtml From #Temp) + '</RawHtml>'
SET @strXml = @strXml + '<FocusPromoInd>' + Convert(nvarchar, 0) + '</FocusPromoInd>'
SET @strXml = @strXml + '<ParentPromoCode>' + (Select ParentPromoCode From #Temp) + '</ParentPromoCode>'
SET @strXml = @strXml + '<ActiveInd>' + (Select Case When ActiveInd=1 Then '1' Else '0' End From #Temp) + '</ActiveInd>'
SET @strXml = @strXml + '<AreaID>' + (Select Convert(nvarchar, AreaID) From #Temp) + '</AreaID>'
SET @strXml = '<PromoData><Promotion>' + @strXml + '</Promotion></PromoData>'
Select @strXml as strXML

当我运行最后一个查询时,它返回null。即使在调试模式下,我也看不到@strXml在每一行上都更新了值。请帮忙!谢谢。

您连接的一个字段为空

任何时候在SQL中连接字符串和空值,结果都是空的

您可以使用COALESCE命令修复以下问题:

declare @strXml nvarchar(max) = ''
set @strXml = '<PromoName>' + (select coalesce(PromoName, '') from #Temp) +
    '</PromoName>'
-- and so on

如果将字符串连接为null,则结果为null。因此,如果您得到的值中只有一个为null,那么整个结果将以null结束

您可以使用isnull,将任何可能为空值的值转换为空字符串

此外,您可以使用单个选择,而不是使用同一表中的大量选择:

select @strXml =
  '<PromoData><Promotion>' +
  '<PromoName>' + PromoName + '</PromoName>' +
  '<PromoCode>' + PromoCode + '</PromoCode>' +
  ...
  '<AreaID>' + convert(nvarchar, AreaID) + '</AreaID>'
  '</Promotion></PromoData>'
from #Temp

如果串联中的任何值为NULL,则结果字符串也为NULL。如果您只是希望NULL值为空,那么可以使用一个SQL NULL函数来返回空字符串。有关不同SQL引擎支持的函数的完整列表,请参阅。

任何包含NULL的表达式的计算结果都为NULL。因此,任何列中的一个NULL都将删除所有其他值。您可以使用ISNULL函数来解决这个问题。考虑用这种方式构造代码:

DECLARE @xml nvarchar(max)

SET @xml = 
(
    SELECT ISNULL(PromoName,'') AS PromoName
        , ISNULL(PromoDesc,'') AS PromoDesc
        , ISNULL(PromoCode,'') AS PromoCode
        --etc.
    FROM #Temp
    FOR XML RAW('Promotion'), ELEMENTS
)

本例还使用了SQLServerforXML子句的简单版本。如果您要在TSQL中将数据转换为XML字符串,我建议您看看这个语言特性。这种技术不适用于其他数据库平台。

正如其他人所指出的,将字符串与NULL连接会产生NULL。SQL Server有一个选项可以控制这一点,因此在查询之前关闭SET CONCAT\u NULL\u YIELDS\u NULL应该可以纠正您的问题。

是否有要连接NULL的值?我的记忆似乎在SQL中认为NULL+任何东西都是NULL。一些格式将很好,使这更容易阅读。那,如果设置的都是SELECT的不是更好吗?哦,非常感谢。很容易就溜出去了。如果字段中的任何一个返回空值,则它永远不起作用。我很感激贾斯汀。谢谢