2

次のコード:

SELECT  *
FROM    portal.workflow AS w
        INNER JOIN portal.workflow_type AS wt
            ON w.workflow_type_id = wt.workflow_type_id
WHERE   wt.doc_type IN ('CentreEV', 'Expenditure Voucher')
        AND w.varchar_1 NOT IN (    select f1.BAT_NAME as 'DocumentFile'
                                    from openquery(QICRE_F1, 'select * 
                                                            from dbo.IO_GLF_BAT_CTL_VW 
                                                            where bat_stat = ''S'' ') f1
                                    where f1.USAGE_STAT = 'A'   ) 

次のエラーをスローしています:

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

次の方法でこれを修正しようとしましたが、構文エラーが発生します。私は(文書を見た後でも)この場合にこれをどのように行うべきか途方に暮れています:

SELECT  *
FROM    portal.workflow AS w
        INNER JOIN portal.workflow_type AS wt
            ON w.workflow_type_id = wt.workflow_type_id
WHERE   wt.doc_type IN ('CentreEV', 'Expenditure Voucher')
        AND COLLATE Latin1_General_CI_AS w.varchar_1 NOT IN 
                                (   select f1.BAT_NAME as 'DocumentFile'
                                    from openquery(QICRE_F1, 'select * 
                                                            from dbo.IO_GLF_BAT_CTL_VW 
                                                            where bat_stat = ''S'' ') f1
                                    where f1.USAGE_STAT = 'A'   ) 
4

1 に答える 1

3

クエリに2つの問題がある可能性があります。このようなものを試してください

...
WHERE ...
   AND w.varchar_1 COLLATE Latin1_General_CI_AS IN  
...

同じ構文をopenqueryコマンドに追加する必要がある場合があります。これは、linkedserver.database.schema.table構文を使用する必要があるかもしれないので、それが機能するかどうかわからないところです-ただそれをテストする必要があります。しかし、このようなもの:

from openquery(QICRE_F1, 'select bat_name COLLATE Latin1_General_CI_AS  
   from dbo.IO_GLF_BAT_CTL_VW 
   where bat_stat = ''S'' ') f1

幸運を。

于 2013-01-14T02:17:11.587 に答える