リンクサーバーは重い

SQLでリンクサーバーとJOINしようとすると、「equal to 操作での照合順序の競合を解決できません」というようなエラーが出る。
その場合、JOINの条件たる「on a.XXXX=b.XXXX」の後におまじないのように

COLLATE JAPANESE_CS_AS_KS_WS


と書くと解決できる。異なるDBの照合順序を、SQLサーバーに教えてあげるわけである。
おまじないだから意味を覚える必要はないのだけれども、「CS」「AS」「KS」「WS」というのは、

「C」=大文字小文字
「A」=アクセント
「K」=ひらがなカタカナ
「W」=全角半角


で、それを「S」=区別する、ということらしい。ちなみに区別しないは「I」。

…のだが、如何せんこの照合順序の競合を一所懸命解決しようと頑張っているからリンクサーバーは重い。
が、そもそも、SQLサーバーにはデフォルトの照合順序があって、DBやテーブルの作成時に特に指定しなければ、「Japanese_CI_AS」になっているようである。
DBに設定されていない照合順序まで、こちらから指定して解決してあげる必要はないから、「COLLATE Japanese_CI_AS」と指定してあげさえすれば、競合は解決する。
そして、解決しようとする労力が減った分、軽くなる。

なお、DBに設定されている照合順序は、下記のSQLで確認することができる。

SELECT SERVERPROPERTY('collation')

Excelの小技(9)VLOOKUP応用編

たまに使うのだけれども、たまにしか使わないから忘れてしまうものを備忘のためにメモしておく。

ふつうのVLOOKUP関数。

=VLOOKUP(B:B,Sheet2!A:B,2,FALSE)


VLOOKUPは、参照先に該当する値がない場合、「#N/A」と表示されてしまう。
この場合、LOOKUPした値の合計を計算しようとしても、数値ではないものが入っているからSUMすることができない。

それを回避するには、「ISERROR」を使う。

=IF(ISERROR(VLOOKUP(B:B,Sheet2!A:B,2,FALSE)), 0, VLOOKUP(B:B,Sheet2!A:B,2,FALSE))


「VLOOKUP(B:B,Sheet2!A:B,2,FALSE)」の結果がエラー(「#N/A」)だったら「0」を入れろ、そうでなければ「VLOOKUP(B:B,Sheet2!A:B,2,FALSE)」の結果を入れろ、ということ。

「朝顔に釣瓶取られて…」

ゴーヤーに ハンドル取られて 何とやら。

朝顔に鶴瓶取られて…

(SONY Cyber-shot DSC-RX100M3)
[ 2017/09/26 22:41 ] 自然・季節 草花 | コメント(0) | TB(0) |  TOP△