Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 server 2008 sql server使用包含撇号的字段选择断点的位置_Sql Server 2008_Tsql - Fatal编程技术网

Sql server 2008 sql server使用包含撇号的字段选择断点的位置

Sql server 2008 sql server使用包含撇号的字段选择断点的位置,sql-server-2008,tsql,Sql Server 2008,Tsql,我已经设置了一个作业来运行报表,并使用多个带有联接的表。我正在连接字符串字段上的两个表,如果该字段包含撇号,则不会返回任何匹配项。这很奇怪,也不知道为什么现在会发生,以前从未发生过。我可能没有确定确切的原因,但非常感谢您的帮助: 示例查询:今天的交易 SET @TITLE = (SELECT MAX(B.DATEADDED) as 'td','', (C.CLIENT + CHAR(10) + B.CLIENTKEY) as 'td','', B.BADQ as

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

示例查询:今天的交易

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。当我单独使用一个查询时,结果集也是空的,但我知道QDATA中的匹配记录在表中。因此,如果是带撇号的查询,那么如何获取匹配字段,或者sql server是否匹配数据,以及其他错误

如果我尝试匹配一个like,它会返回结果,但这并不准确。

如果B.BADQ和a.QUERYT不完全匹配,您将无法返回任何记录。它与LIKE一起工作的事实让我怀疑其中一个是否有额外的字符,在匹配数据之前或之后,这取决于您如何设置LIKE

下面Michael Green是对的,尾随空格本身不会阻止匹配,但是,根据数据的来源,您可能会有一些其他字符,例如嵌入的字符0或制表符,在查看记录中的数据时不会出现,但这足以阻止记录匹配。您可以对这两个字符串使用CHECKSUM函数来验证它们是否表示相同的数据

另一种类似的可能性是,如果值中有一串空格,比如a,B',两个实例之间的空格数可能不同。它们在HTML中看起来是一样的,就像您正在生成的一样,但实际上它们是不同的,足以阻止匹配


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

SQL标准的奇怪之处在于,尾随空格不依赖于比较:declare@a varchar20='a';声明@b varchar20='a';如果@a=@b打印“相等”,则打印“否”;在没有FORXML子句的情况下尝试它;"apos,;这也是我的第一个想法。@MichaelGreen你说得对。我记错了。我当然被尾随空格咬了一口,但可能是C语言,而不是SQL语言!