SQLServer 数据库查询异常
SQLServer查询两个库中表的关联数据,执行时候发生异常信息
Cannot resolve the collation conflict between “Chinese_PRC_CI_AS” and “SQL_Latin1_General_CP1_CI_AS” in the equal to operation.
异常解释以及处理
-
异常解释
是由于在 SQL Server 中进行跨数据库查询时,两个数据库中的列使用了不同的排序规则(collation)。在这个例子中,一个数据库使用了 “Chinese_PRC_CI_AS”(简体中文的排序规则)而另一个数据库使用了 “SQL_Latin1_General_CP1_CI_AS”(拉丁文的排序规则)。 -
处理方法
① 更改查询的方式,这个是影响最小的方法。
SELECT * FROM Database1.dbo.Table1 AS t1 INNER JOIN Database2.dbo.Table2 AS t2 ON t1.ColumnName COLLATE SQL_Latin1_General_CP1_CI_AS = t2.ColumnName
在这个例子中,我们将 Database1.dbo.Table1 中的 ColumnName 列的 collation 更改为了 SQL_Latin1_General_CP1_CI_AS,以匹配 Database2.dbo.Table2 中的 ColumnName 列的 collation。
②更改数据库或者列的collation
你可以更改其中一个数据库或列的 collation,使其与另一个匹配。这通常涉及到更改整个数据库的默认 collation 或更改特定列的 collation。- 更改数据库默认 collation 的示例:
ALTER DATABASE YourDatabaseName COLLATE Chinese_PRC_CI_AS;
- 更改列 collation 的示例:
ALTER TABLE Database2.dbo.Table2 ALTER COLUMN ColumnName VARCHAR(255) COLLATE Chinese_PRC_CI_AS;
注意 ,更改数据库或列的 collation 可能会影响到已有的数据和应用程序的行为,因此在执行之前应该仔细考虑和测试。
③使用临时表
- 更改数据库默认 collation 的示例: