如果要检查SQL排序规则的语句,则运行查询

时间:2018-01-10 12:20:40

标签: sql sql-server tsql

我刚刚对我刚刚回答的一个问题提出了一些很好的帮助(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数据库上使用不同的排序规则到其他服务器。

可以这样做吗?

1 个答案:

答案 0 :(得分:1)

你可以使用

COLLATE DATABASE_DEFAULT代替COLLATE <specific_collation_name>

并且您无需检查正在使用的排序规则。

但是,最佳做法是在所有数据库中使用相同的排序规则,否则必须