1

当尝试一个简单的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。我相信联系第三方是唯一的选择。

4

1 回答 1

2

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

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

于 2013-01-17T15:55:25.317 回答