我刚刚对我刚刚回答的一个问题提出了一些很好的帮助(Query over two databases has error due to collation mismatch),以便克服我正在使用的MSSQL查询的排序规则错误。
查询是否有办法首先检查数据库归类?
假设的例子(我不知道语法):
CASE
WHEN DATABASEPROPERTYEX('PracticeEvolve_c1.dbo, 'Collation') SQLCollation = 'COLLATE SQL_Latin1_General_CP1_CI_AS'
THEN
CASE
WHEN [dd_entity_d2].[type] COLLATE SQL_Latin1_General_CP1_CI_AS ='Individual'
THEN etClient.FirstName COLLATE SQL_Latin1_General_CP1_CI_AS
ELSE [dd_entity_d4].[firstname] COLLATE SQL_Latin1_General_CP1_CI_AS
END AS FirstName,
ELSE
CASE
WHEN [dd_entity_d2].[type] ='Individual'
THEN etClient.FirstName
ELSE [dd_entity_d4].[firstname]
END AS FirstName
END,
CASE
WHEN DATABASEPROPERTYEX('PracticeEvolve_c1.dbo, 'Collation') SQLCollation = 'COLLATE SQL_Latin1_General_CP1_CI_AS'
THEN
CASE
WHEN [dd_entity_d2].[type] COLLATE SQL_Latin1_General_CP1_CI_AS ='Individual'
THEN etClient.LastName COLLATE SQL_Latin1_General_CP1_CI_AS
ELSE [dd_entity_d4].[lastname] COLLATE SQL_Latin1_General_CP1_CI_AS
END AS LastName,
ELSE
CASE
WHEN [dd_entity_d2].[type] ='Individual'
THEN etClient.LastName
ELSE [dd_entity_d4].[lastname]
END AS LastName
END,
这样我就不必使用不同的查询,如果我遇到我们网站上的一个服务器,它们在PracticeEvolve_c1数据库上使用不同的排序规则到其他服务器。
可以这样做吗?
答案 0 :(得分:1)
你可以使用
COLLATE DATABASE_DEFAULT
代替COLLATE <specific_collation_name>
并且您无需检查正在使用的排序规则。
但是,最佳做法是在所有数据库中使用相同的排序规则,否则必须