当链接服务器使用SQL Server时,串联不起作用

时间:2018-07-11 10:04:33

标签: sql-server concatenation linked-server

在SQL Server( server1 )中运行select语句时

select IDNo, Code + ' ' + No + ' ' + Extension as Ext, MenuNo
from [database1].[dbo].[table1]

得到预期的结果:

1  |  Toranto 56 Placid 47  |  34563

但是从另一台服务器(服务器2)对服务器1的查询与链接服务器相同,则输出不完整。即 串联列(第二列)仅返回预期列值的第一个字母(IDNoMenuNo正确出现)

使用链接的服务器查询(在 server2 上运行):

select IDNo, Code+' '+ No + ' ' + Extension, MenuNo
from [server1].[database1].[dbo].[table1]

输出:

 1  |  T  |  34563

注意:

  • server2 : SQL_Latin1_General_CP1_CI_AS
  • server1: Latin1_General_CI_AI

请帮助

2 个答案:

答案 0 :(得分:0)

使用CAST

select IDNo, CAST(Code+' '+ No + ' ' + Extension) as VARCHAR(8000), MenuNo from [server1].[database1].[dbo].[table1]

或结果集

EXEC('SELECT ... ') WITH RESULT SET ...

答案 1 :(得分:0)

我认为这与Collations不同。

在这里您可以阅读它的内容:

https://docs.microsoft.com/en-us/sql/t-sql/statements/collations?view=sql-server-2017

在这里您可以了解如果Collations在服务器之间不同时该怎么做:

https://www.sqlservercentral.com/Forums/Topic906390-146-1.aspx

(您必须完成查询,并指出要使用哪个Collations

例如:

SELECT Table1.Column1, Table1.Column2
FROM LinkedServer.db1.owner.Table1 AS Table1
JOIN db2.owner.Table2 AS Table2 
ON Table1.Column1 = Table2.Column1 COLLATE Latin1_General_CI_AI