【问题标题】:If statement to check SQL collation then run query如果语句检查 SQL 排序规则然后运行查询
【发布时间】:2018-01-10 12:20:40
【问题描述】:

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

这个可以吗?

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    你可以使用

    COLLATE DATABASE_DEFAULT 而不是COLLATE <specific_collation_name>

    而且您不需要检查正在使用的排序规则。

    然而,最好的做法是在所有数据库中使用相同的排序规则,除非需要,否则

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-12
      • 1970-01-01
      • 2015-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多