Mr.Tの場所

特攻野郎Aチームじゃないよー

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  177  : 記事  0  : コメント  752  : トラックバック  37

ニュース

  • 性別:男
  • 猫1:まる
  • 猫2:もろ
  • 猫3:にゃん左部郎
  • タバコ:男は黙ってJPS
[わんくま同盟] C#, VB.NET 掲示板
フィードメーター - Mr.Tの場所

書庫

日記カテゴリ

Mr.Tです、こんにちは。

 

おそらく自分がしらなかっただけ、なのかもしれませんので、メモ代わりとして。

 

なんの話かというと、あるテーブルに対してVarcharのフィールドを作成して、

Select文で条件をつけて抽出したとき、

 

 

こんなコードを書いたとすると、SQLServer2000までなら、上のSQLはエラーになる

はずです。intをvarcharにできませんとか、怒られてしまいます。

 

ところが、Microsoft SQL Server Management Studio Express上では、エラーになりません。

 

 

ええーーーー。

おんなじ結果やん。

シングルクォーテーションで囲わなくても結果がでてしまいます。

 

うそーん、とか言う前にじゃあ、どうやってやってるんだろ、と実行プランをみてみました。

下のやつが、シングルクォーテーションあり。

 

これが、シングルクォーテーションなし。通常ならエラーになるはずなのに...

うむ、予想通り、Convertしているではないか。

プロパティの述語の欄を参照だ。

 

CONVERT_IMPLICIT(int,[SGENKA].[dbo].[M_Section].[SectionCD],0)=CONVERT_IMPLICIT(int,[@1],0)

 

少々ぐぐってみる。

CONVERT_IMPLICIT SQLServer2005

 

まずは、PASSJのココ

http://www.sqlpassj.org/bbs/ml_disp.aspx?forum_id=0&current_page=1&disp_mode=0&detail_mode=1&message_id=21762

中ほどよりも後半の部分に、

実行プランで「CONVERT_IMPLICIT」が発生していることがわかると思います。
この「CONVERT_IMPLICIT」は暗黙的型変換がおこなわれている証拠です。
これは Transact-SQL だけではなく、ADO.NET、ADO、ODBC、JDBC でも起こりうる現象

です。
クエリーのパラメータをカラムのデータ型に一致させていないと発生します。
クエリーが動くからいいという観点で開発していると暗黙的型変換が発生しているこ
とに気がつかずに、データ量が増えたときに「CONVERT_IMPLICIT」が足かせになって
パフォーマンスが出なくなることがありますので注意してください。

という記述があります。

 

つまり、暗黙の変換をしているわけですか。

で、もうちょっと見てみる。

http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PageIndex=1&SiteID=7&PageID=1&PostID=1485885

#もう去年の話題かよ(;;)

 

 

で、2008ではどうなんだろ。と思ったら、

[SQL Server 2008 CTP Febを入れてみた]

http://blogs.wankuma.com/kaya/archive/2008/02/27/125223.aspx

を思い出した。

 

おしえて、夏椰タン~

#いや、「おしえて、ダンコーガイ」ってやつをいってみたかったんだけど、ダンコーガイに
#SQLServerの話きいてもねー、と。

投稿日時 : 2008年3月12日 12:01

コメント

# re: SQLServer2005で、暗黙の型変換が行われる 2008/03/12 12:39 ぽぴ王子
それでも夏椰さんなら…夏椰さんなら、わざわざ「ダンコーガイ」という
ハンドル名に変えてまで答えてくれるに違いない!

どんだけハードル上げてんだよ(笑)

# re: SQLServer2005で、暗黙の型変換が行われる 2008/03/12 21:18 団子ーかよ(違
http://msdn2.microsoft.com/en-us/library/ms187928(SQL.100).aspx

英語でしゅまぬです。
2008でも暗黙型変換あるっす。

♯ハードルに躓いたかしらん?(爆

# re: SQLServer2005で、暗黙の型変換が行われる 2008/03/13 9:58 Mr.T
うお、ダンゴー...かよ?

ありがとうございます。
やはり、2008でも同じなのですね。
勝手に変換してくれがやりますのね。

http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PageIndex=1&SiteID=7&PageID=1&PostID=1485885
からの流れでいくと、暗黙の型宣言をなくすってのは難しい
だろうね、でもとりあえず要望としてあげておこうか、後は
それを検知できるような仕組みもあってもいいね、という
感じでした。

>♯ハードルに躓いたかしらん?(爆
いえ、すでにハードルより高すぎて、棒高跳び状態ですw



Post Feedback

タイトル
名前
Url:
コメント