Sql server SQL-比较2个文本字段

Sql server SQL-比较2个文本字段,sql-server,Sql Server,我正在使用一个叫做FME桌面的软件。在这个软件中,我们可以通过名为transformer的项发出SQL命令。我正在使用一个名为SQLExecutor的转换器,它使用一个非常简单的查询来进行比较。下面是我试图对这个SQL查询所做的解释,以及它在尝试比较两个文本字段时不起作用的事实 我认为我的问题是SQL在SQLExecutor中使用时的局限性。假设我有一个名为TEST.LEASE的数据层,我想基于一个唯一的ID字段将它与一个名为EDIT.LEASE的数据层进行比较。这两个层都在同一个数据库中。我们

我正在使用一个叫做FME桌面的软件。在这个软件中,我们可以通过名为transformer的项发出SQL命令。我正在使用一个名为SQLExecutor的转换器,它使用一个非常简单的查询来进行比较。下面是我试图对这个SQL查询所做的解释,以及它在尝试比较两个文本字段时不起作用的事实

我认为我的问题是SQL在SQLExecutor中使用时的局限性。假设我有一个名为TEST.LEASE的数据层,我想基于一个唯一的ID字段将它与一个名为EDIT.LEASE的数据层进行比较。这两个层都在同一个数据库中。我们使用SQL Server存储数据。这两个层中都有一个名为GIS_ID的文本字段。这是一个唯一的ID字段。所以我们在租赁层上得到更新,然后开始加载到TEST.LEASE。当我们完成了数据的QA/QC,并且我们确信数据已准备好上传到EDIT.LEASE时,我们将运行一个FME作业,作为我们的推广工具。此升级工具的作用是检查TEST.LEASE中的各个字段,以确保它们符合上载条件(此部分100%正常工作)

在升级到EDIT.LEASE之前,我们需要知道这是否是一条全新的记录,在这种情况下,我们将使用FME进行插入。如果碰巧GIS_ID已经存在,那么我们需要对这些记录进行更新。我们拥有的工具可以完美地确定它是插入还是更新,除了一件看起来很小的事情……它只在文本字段包含一个没有字母的数字时才起作用

仅供参考:我们公司有人决定将GIS_ID字段设置为文本字段。在我看来,它应该是一个整数字段,因为比较会非常容易。但我现在不能改变这一点,已经有人决定让比我赚更多的钱,这将是一个文本字段

如前所述……GIS_ID是一个文本字段(在两个层中,它们的大小相同,在两个层中的字段没有差异)。您可能知道,当字段中包含的所有内容都是数字时,SQL不关心它是文本字段还是整数字段。它仍然可以比较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错误。我不是在寻找一种方法让作业继续并忽略这些记录,因为我需要加载所有记录。我需要知道是否有人知道如何添加或重写上面的查询,以便它同时加载“仅数字文本字段”和“包含字母字段的数字”

我希望长时间的解释是清楚的。如果不是,请告诉我。谢谢你能为我提供的任何帮助

真诚地,
Tex

我假设@value是导致您出现问题的函数。我简短地检查了他们的文件。看起来您需要像这样封装“@value(GIS)”


Jeff是对的,对于普通sql用户,甚至是在应用程序代码中使用sql的人来说,作为一个通用答案,如果您要比较像op提到的文本,那么您需要使用单引号

其中avalue='myvalue'

否则,SQLServer会认为它是一个int,因此当他传递的值只是数字时,为什么它会起作用。在传递参数时,要知道问题出在哪里并不容易

其中avalue=@myvalue

所以你需要注意这一点。我只是想提一下这一点,也许它能帮助其他人解决类似的问题。当我们从一个连接了一个id字段的字段中得到错误时,我发现了这一点,也就是说,当值=2,而不是2,3等时,它就起作用了。将参数用单引号括起来很容易解决这个问题,因为在我们的例子中,我们真正关心的是值='2'

希望这是有意义的