7

複数のフィールドの組み合わせを1つだけとして表示しようとしています。(私は顧客からそうするように頼まれました)。次のコマンドを試しましたが、前述のエラーが発生します。

SQLスニペット:

SELECT        dbo.VPayment_2.Serial, dbo.VPayment_1.Description, dbo.VPayment_2.Money, dbo.VPayment_1.PaymentType,, 
                         'Payment ' + dbo.VPayment_1.PaymentType + ' - ' + ' Serial ' + CAST(dbo.VPayment_2.Serial AS nvarchar(15)) 
                         + '(' + dbo.VPayment_1.Description + ')' AS Compact Info 
FROM            dbo.VPayment_2 INNER JOIN
                         dbo.VPayment_1 ON dbo.VPayment_2.ID = dbo.VPayment_1.ID

最終結果は次のようになります。

---------------------------------------------------------------------------
Serial  Description    Money    PaymentType         Compact Info
123456  some info      500$        Check      Payment :Check - Serial 123456 - some info 
0       some info2     100$      In Cash      Payment :In Cash - Serial 0 - some info   

これを実現するために、問題のテーブルから2つのビューを作成し、IDを使用してこれらの2つのビューを内部結合し、期待される結果を取得しました。問題は、他のフィールドの組み合わせであるコンパクト情報フィールドを追加すると、エラーが発生することです。

selectステートメントの列5の照合の競合を解決できません

これは、私が何も比較していないときに発生します。

4

1 に答える 1

17

のようdbo.VPayment_1.PaymentTypedbo.VPayment_2.Serial聞こえ、照合は異なります(これは、比較するときだけでなく、結合、連結などのときにも発生します)。

いくつかの修正があります:

  1. 1つのビューまたは両方を変更して、それらの列に同じ照合を使用します。これを行うには、基になる列を変更するか、ビューのリストでCOLLATE句を指定します。例:SELECT

    SELECT PaymentType COLLATE Latin1_General_CI_AI
    ... FROM ...
    
  2. クエリ内で明示的に照合します。例:

    ... 'Payment ' + dbo.VPayment_1.PaymentType COLLATE Latin1_General_CI_AI
        + ' - ' + ' Serial ' + CAST(dbo.VPayment_2.Serial COLLATE Latin1_General_CI_AI
        AS nvarchar(15))
    
  3. 最善の解決策は、同じ照合を使用するようにすべての文字列列を修正することです。人々がさまざまなテーブル、データベース、またはサーバーでさまざまな照合を使用していて、まだ有効な説明が得られていないという多くのケースに遭遇しました。ほとんどの場合、照合が異なる理由がわかりませんでした。

于 2013-02-26T17:17:03.437 に答える