尝试简单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。我相信联系第三方是唯一的选择。
答案 0 :(得分:2)
看过你的评论后,SQL Server标签实际上有点误导。您正在使用其驱动程序在供应商数据库上运行。显然,他们的数据库支持CONCAT
函数,该函数只接受两个参数,而不是可能需要更多的SQL Server 2012函数。这解释了你的第一个问题。
至于你看到的其他结果,你需要向供应商提出这个问题。您用于DTS的SQL Server版本在这里没有任何相关性。