sql server选择包含撇号的字段的中断位置

时间:2014-04-17 15:55:12

标签: sql-server-2008 tsql

我已经设置了一个作业来运行报表并使用多个带连接的表。我在字符串字段上连接两个表,如果该字段包含撇号,则不返回任何匹配项。这很奇怪,不确定为什么现在发生,从未发生过。我可能没有确定确切的原因,但会在此感谢任何帮助:

示例查询:"今天的交易"

SET @TITLE = (SELECT MAX(B.DATEADDED) as 'td','',
     (C.CLIENT + CHAR(10) +  B.CLIENTKEY)    as 'td','', 
      B.BADQ as 'td','',A.FULLQ as 'td','', B.BADERROR as 'td', 
'' 
FROM BADQUERY AS B 
LEFT JOIN QDATA AS A ON B.BADQ = A.QUERYT 
LEFT JOIN Clients AS C ON C.clientKey = B.clientKey 
WHERE DATEDIFF(minute,CAST(B.DATEADDED as datetime),GETDATE())<=420 AND 
      DAY(GETDATE()) = DAY(B.DATEADDED)
GROUP BY B.BADT,A.FULLQ, B.CLIENTKEY,C.CLIENT, B.BADERROR
FOR XML PATH ('tr'), ELEMENTS XSINIL)

由于某种原因,A.FULLQ被返回为NULL。当我仅使用查询单独执行时,结果集也为null但我知道QDATA中的匹配记录为A在表中。因此,如果是带有撇号的查询,如何获取匹配字段,或者是sql server匹配数据还有其他错误。

如果我尝试与之匹配,则返回结果,但这不准确。

1 个答案:

答案 0 :(得分:0)

如果B.BADQA.QUERYT完全匹配,则您无法获得任何记录。它与LIKE一起工作的事实让我想知道其中一个是否有其他字符,在匹配数据之前或之后(取决于你如何设置LIKE)。

迈克尔·格林在下面是正确的,尾随空白本身并不能防止匹配,但是,根据数据的来源,你可能还有其他一些角色(例如嵌入式CHAR(0)或查看记录中的数据但不足以阻止记录匹配时,不会显示TAB个字符。您可以在两个字符串上使用CHECKSUM()函数来验证它们是否代表相同的数据。

另一种类似的可能性是,如果值中有一串空白(类似于&#34; A,B,&#39;&#39;&#34;)空白的数量可能会有所不同两个实例之间。它们在HTML中看起来相同(它看起来像你正在生成),但它们在现实中是不同的,并且足以阻止匹配。

最后,您使用撇号生成XML并观察问题这一事实让我想到了这一点:如果XML标记的内容有撇号,它将转换为&apos;。这应该只影响查询的输出,而不是功能,但我不知道你的数据实际上是什么样的。