我已经设置了一个作业来运行报表并使用多个带连接的表。我在字符串字段上连接两个表,如果该字段包含撇号,则不返回任何匹配项。这很奇怪,不确定为什么现在发生,从未发生过。我可能没有确定确切的原因,但会在此感谢任何帮助:
示例查询:"今天的交易"
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匹配数据还有其他错误。
如果我尝试与之匹配,则返回结果,但这不准确。
答案 0 :(得分:0)
如果B.BADQ
和A.QUERYT
完全匹配,则您无法获得任何记录。它与LIKE一起工作的事实让我想知道其中一个是否有其他字符,在匹配数据之前或之后(取决于你如何设置LIKE)。
迈克尔·格林在下面是正确的,尾随空白本身并不能防止匹配,但是,根据数据的来源,你可能还有其他一些角色(例如嵌入式CHAR(0)
或查看记录中的数据但不足以阻止记录匹配时,不会显示TAB
个字符。您可以在两个字符串上使用CHECKSUM()
函数来验证它们是否代表相同的数据。
另一种类似的可能性是,如果值中有一串空白(类似于&#34; A,B,&#39;&#39;&#34;)空白的数量可能会有所不同两个实例之间。它们在HTML中看起来相同(它看起来像你正在生成),但它们在现实中是不同的,并且足以阻止匹配。
最后,您使用撇号生成XML并观察问题这一事实让我想到了这一点:如果XML标记的内容有撇号,它将转换为'
。这应该只影响查询的输出,而不是功能,但我不知道你的数据实际上是什么样的。