自定义DBMS中的字符串连接产生奇怪的结果

时间:2013-01-17 15:45:03

标签: concatenation database

尝试简单CONCAT时,我遇到语法错误。连接使用专有的ODBC驱动程序,我确定这是问题,但想知道我能做些什么。以下是我最初尝试的查询:

SELECT CONCAT('DF', '01', ServiceCode) AS RecordID
FROM ServiceCodes

然而,这会在, ServiceCode附近引发语法错误,没有其他信息。所以我试过了:

SELECT 'DF' + '01' + ServiceCode AS RecordID
FROM ServiceCodes

但是这会返回错误term_expr type not supported,我认为这是来自驱动程序的特定错误。

然后我尝试了:

SELECT CONCAT(CONCAT('DF', '01'), ServiceCode) AS RecordID
FROM ServiceCodes

哪个似乎有效!返回类似DF01MOT的字符串。这适用于所有服务器,因此我添加了产生查询的额外字段:

SELECT CONCAT(CONCAT('DF', '01'), ServiceCode) AS RecordID, 'DF' AS Environment 
FROM ServiceCodes

除了1台服务器外,这似乎也有效。在这一台服务器上运行上述查询时,它现在将返回DF0DFMO而不是DF01MOT,最后2个字符会根据ServiceCode在每行中更改,再添加更多字段会更改此设置,例如:

SELECT CONCAT(CONCAT('DF', '01'), ServiceCode) AS RecordID, 'DF' AS Environment, '01' AS SO
FROM ServiceCodes

这会在所有行中为此字段返回DF0DF01

那为什么会这样呢?为什么只在一台服务器上?驱动程序在所有服务器上都是相同的,但这是驱动程序的问题吗?我该怎么做才能解决它?

编辑:为避免混淆,我修改了标题和标签。这实际上是通过SQL Server企业管理器中的DTS包访问第三方提供的自定义DBMS。我相信联系第三方是唯一的选择。

1 个答案:

答案 0 :(得分:2)

看过你的评论后,SQL Server标签实际上有点误导。您正在使用其驱动程序在供应商数据库上运行。显然,他们的数据库支持CONCAT函数,该函数只接受两个参数,而不是可能需要更多的SQL Server 2012函数。这解释了你的第一个问题。

至于你看到的其他结果,你需要向供应商提出这个问题。您用于DTS的SQL Server版本在这里没有任何相关性。