我使用的是名为FME Desktop的软件。在这个软件中,我们可以通过一个名为变换器的项发出SQL命令。我正在使用一个名为SQLExecutor的变换器,它使用一个非常简单的查询来进行比较。下面解释了我正在尝试使用这个SQL查询,以及它在尝试比较2个文本字段时不起作用。
我相信在SQLExecutor中使用时,我的问题是SQL的限制。让我们说我有一个名为TEST.LEASE的数据层,我想根据一个唯一的ID字段将它与一个名为EDIT.LEASE的层进行比较。这两个层都在同一个数据库中。我们使用SQL Server存储数据。两个层中都有一个名为GIS_ID的TEXT字段。这是一个唯一的ID字段。所以我们在LEASE层上获得更新,然后开始加载到TEST.LEASE。当我们完成数据的质量保证/质量控制并且我们对它们已准备好上传到EDIT感到满意。然后我们运行一个FME作业作为我们的推广工具。这个促销工具的作用是它检查TEST.LEASE中的各个字段,以确保它们有资格上传(这部分100%没有问题)。
在它们被提升为EDIT之前。我们需要知道这是否是一个全新的记录,在这种情况下我们将使用FME进行INSERT。如果GIS_ID已经存在,那么我们需要对这些记录进行更新。我们所使用的工具非常适用于确定它是INSERT还是更新,除了一个看似很小的东西......如果文本字段包含一个没有字母的数字,那只能工作。
仅供参考:我们公司的某个人决定将GIS_ID字段设为文本字段。在我看来,它应该是一个整数字段,因为比较会非常简单。但是我现在无法改变这种情况,已经由那些比我更赚钱的人决定它将成为一个文本领域。
如上所述...... GIS_ID是一个文本字段(在两个层中它们都是相同的大小,两个层中的字段没有区别)。您可能知道,当该字段中包含的所有内容都是数字时,SQL并不关心它是TEXT字段还是INTEGER字段。它仍然可以比较202到202,看它们是否彼此相等。对于我的示例,让我们说我在TEST.LEASE和EDIT.LEASE中都有一条记录,其中两个GIS_ID字段都等于09198760.当我运行下面的查询时,它运行完美。
select OBJECTID
from TEST.LEASE_UPDATE_INSERT_WRITER
where GIS_ID = @Value(GIS_ID)
正如我所提到的,如果两个GIS_ID文本字段中只包含数字,那么它在数据上运行完美。但是如果只有一条记录包含实际的alpha,则SQL查询将会出错。
因此,一旦查询到达GIS_ID中的“a”,如果GIS_ID具有09198760a01,则返回SQL错误。我不是在找工作方式继续并忽略那些记录,因为我需要加载所有记录。我需要知道是否有人知道如何添加或重写上面的查询,以便它加载“仅限数字文本字段”和“包含字母字段的数字。”
我希望很长时间的解释是清楚的。如果不是,请告诉我。感谢您为我提供的任何帮助
此致 特
答案 0 :(得分:0)
我假设@value是导致你出问题的函数。我简要检查了他们的文档。它看起来像你需要封装'@value(GIS)'
答案 1 :(得分:0)
杰夫是对的,作为普通sql用户的普通答案,甚至是在他们的应用程序代码中使用sql的人,如果你要比较提到的文本,那么你需要使用单个'引用'。
avalue =' myvalue'
否则sql server认为它是一个int,因此当他传入的值只是数字时,它的工作原理。当您传递参数时,并不总是很容易分辨出问题所在。
avalue = @myvalue
因此,您需要注意这一点。只是想提一下,所以也许它可以帮助其他有类似问题的人。当我们从一个连接了id字段的字段中获取错误时,我想出了这一点,即它在值= 2但不是2,3时工作。将参数包装在单引号中很容易修复,因为我们真的只关心价值=' 2'在我们的例子中。
希望这是有道理的。