web-dev-qa-db-ja.com

SQL ServerのJOINでCOLLATEを使用する方法は?

2つのテーブルを結合しようとしていますが、このエラーが発生します。

メッセージ468、レベル16、状態9、行8等しい操作で「SQL_Latin1_General_CP1_CI_AS」と「Latin1_General_CI_AS」の間の照合競合を解決できません。

これは私が使用しているコードです:

 SELECT *

  FROM [FAEB].[dbo].[ExportaComisiones] AS f

  JOIN [zCredifiel].[dbo].[optPerson] AS p

  ON (p.vTreasuryId = f.RFC) COLLATE Latin1_General_CI_AS 

私はそれが間違っていることを知っています、それはCOLLAT​​Eを強調します。私はそれを適用する方法を知りません。

16
D.Roca

正しい構文は次のようになります。 MSDN を参照してください。

SELECT *
  FROM [FAEB].[dbo].[ExportaComisiones] AS f
  JOIN [zCredifiel].[dbo].[optPerson] AS p

  ON p.vTreasuryId COLLATE Latin1_General_CI_AS = f.RFC COLLATE Latin1_General_CI_AS 
33
Alex Kudryashev

一般的なルールとして、Database_Default照合を使用できるため、どちらを使用するかを決める必要はありません。ただし、Simons Liewの優れた記事を読むことを強くお勧めします SQL ServerのCOLLATE DATABASE_DEFAULT句について

SELECT *
  FROM [FAEB].[dbo].[ExportaComisiones] AS f
  JOIN [zCredifiel].[dbo].[optPerson] AS p
  ON (p.vTreasuryId = f.RFC) COLLATE Database_Default 
5
Julio Nobre