2010年4月21日水曜日

[他]SQLServerの最大容量仕様

以前SQLServer2000の時代、ADO.NETから長いSQL(whereのin条件をたくさん書いている)を実行し、8000byte付近を越えるとエラーになって困っている人がいました。
それを聞いたとき、「そんなSQLって...。作りがおかしい」と思っていました。それは今も変わりません。

アレから、数年たちました。SQLServerも2008にバージョンがあがりました。で先日「はて、今はどれくらいの長さのSQLが投げれるんだろ?」とおもい調べてみました。
調べてみるとSQL Server の最大容量仕様のバッチ サイズがソレにあたります。「65,535*パケットサイズ」って書いてあるんですが、パケットサイズは標準で4KBなので、262,140KBまでいける?ってことでしょうか。
・・・何か勘違いしている気が。。。

とはいえ、INSERTをバッチクエリで処理したい場合、相当長い文が投げれることになります。
パフォーマンス的には効果が出そうですね。

2010年4月20日火曜日

[他]コーディングと単体テスト

製造工程の作業といえば、「コーディング→コンパイル→単体テスト」です(私的には。ですが)。
合っているかどうかは別として。。。ですが、今までやって来た開発は「コーディング→コンパイル→疎通→単体テスト」で、疎通という工程を加えていました。コレは生産物がある程度動作するレベルにあることの確認と、量産時に不具合入りのコードをコピーされないようにするという目的もあります。

いま私の携わっているプロジェクトでは、疎通を実施していません。また、コーディングと単体テストの担当が異なることが多く、動かしたらいきなりエラーみたいな場合があり、現場は大混乱状態。。。

私なら。。。ですが、多少の負担が合ったとしてもコーディング担当が疎通まで実施し、単体テスト担当に引き渡したい気がしますが、一般的にどうなんでしょう。よくわかりませんね。

2010年4月15日木曜日

[.NET]C#の割り算

先日、割り算を実施し小数点以下2桁で四捨五入する。という仕様の処理をテストしていました。しかしどのパターンでも小数点以下の結果が入らず、テストNGとなりました。
で調べてみると、演算対象の両方の値がint同士であることがわかりました。C#ではint/byte/long同士の割り算では、結果が切り捨てられてしまいます。

ということで、片方をdoubleでキャストし、割り算をした結果、想定どおりになりました。
めでたしめでたし。・・・こういうのって、言語仕様を知らないのは、技術者として罪のような気がしました。

2010年4月13日火曜日

[.NET]各言語での演算子の違い

歳のせいでしょうか?実力でしょうかわかりませんが、C#でいうinstanceofってVB.NETでは???...。ということがしばしばあります。
というわけで、困ったときに各言語の演算子の比較を見れば。というのを備忘録代わりにメモ。

2010年4月9日金曜日

[.NET]キャストとASの違い

C#では型をキャストする方法として、(型)によるキャストとASによるキャストがあります。
両方をキャストと表現して良いのかよくわかりませんが、どう表現してよいのかわからないので、以下、キャストと表現します。

違いがよくわからなかったので、C時代から使っているキャストを使っていました。で調べてみると、以下のような違いがあることがわかりました。

  • (型)によるキャスト:型が異なると例外
  • ASによるキャスト:型が異なるとNULL


まぁそもそもキャストすると言う行為自体がアレなんですが、ASにしておけば引数がNULLの場合と型が異なる場合をNULLかどうかで判定できます。
パフォーマンス的にどちらが良いというのは不明ですが、例外処理は基本的に重たいので、おそらくASのほうがよいと考えられます。その辺も含め、両方の処理が同じであればASのほうがいいのかもしれませんね。

2010年4月6日火曜日

[他]SQLServerのSQL実行時間(SET)

GDD Blog: [他]T-SQLでSQLのミリ秒単位で時間を計測するでSQLServerの実行時間のとり方を紹介しましたが、SET文でも同様のことができることがわかりましたので紹介します。
STATISTICS PROFILEのほうは、プロファイルを取得する方法です。ついでに紹介。

SET STATISTICS PROFILE ON;
SET STATISTICS TIME ON;


で調べていると、SET オプションの一覧がありましたので、これもついでに紹介します。