SQL

datetime の時間部分を切り捨てる方法

SQL Server で、日付型の時間部分を切り捨てる (yyyy-MM-dd 00:00:00 というような日付だけの形式にする) には、以下のように書きます。 SELECT CONVERT(DATETIME, CONVERT(nvarchar, GETDATE(), 111), 120) 今までどんな方法で切り捨てていましたか? おすす…

UPDATE 文や INSERT 文でも WHEN CASE を活用

SQL Server では、 UPDATE 文や INSERT 文内で複数テーブルを FROM に指定して処理を行うことができます。そして、結合した結果や SET に指定する値を CASE WHEN で条件分岐することも可能です。非常に便利なテクニックですが、乱用すると SQL が読みにくく…

資料「SQL Server 2005 チューニングとサイジングのポイント」

SQL Server のチューニングメモ。Microsoft On セッション資料「SQL Server 2005 チューニングとサイジングのポイント」最低限、基本を守りましょう。 (テーブル構造とインデックス、アルゴリズム、...) たまに驚く構造の DB を見ることがあって、悲しい思い…

DB の復元に失敗した場合のチェックポイント

概要 SQL Server 2005 Express で DB を復元しようとしたとき、以下のようなエラーメッセージが表示される場合があります。 ((復元に失敗しました。 System.Data.SqlClient.SqlError: 'RestoreContainer::ValidateTargetForCreation' を試行中に、オペレーテ…

ミラーリングに関するメモ

SQL Server 2005 (2008) のメモです。自分用なのでまとまってなくて申し訳ないです。 クライアントはどこに接続する? 監視サーバ? ミラー側の情報をAPPに記述? →最初の接続時にミラーの情報が取得される サービスの強制後に、損失したデータを確認可能? …

マージと P2P の使い分け、ログ配布とミラーリングとクラスタ化などメモ

SQL Server 2005 (2008) のメモです。自分用なのでまとまってなくて申し訳ないです。マージと P2P の使い分けは? ログ配布とミラーリングとクラスタ化 注意 アプリケーションの接続先 ログイン情報 → 違い レプリケーションは、テーブルレベル 接続先変更は…

MS の SQL Injection 対策ツール

SQL インジェクション攻撃とその対策が公開されています。ツールによるチェックに加えて日頃からコードレビューなどで安全を確保しましょう。

複数のバックアップを持っている .bak から一部のみを削除することはできない

SQL Server のバックアップ機能では、 1 つのバックアップファイルに複数のバックアップ (完全や差分、ログ) を含めることができます。ただ、残念なことにこのうちの 1 つを後から削除しようと思ってもできないようです。なので、 1 ファイル 1 バックアップ…

チェックサムを使うメリット

SQL Server のバックアップには、「メディアに書き込む前にチェックサムを行う」というオプションが存在します。このオプションはどの程度効果があるのでしょうか。……不明です。 MSDN をみてもいまいちわかりませんでした。時間があれば実験したいところです…

バックアップデバイスを使うメリット

バックアップデバイスは、 SQL Server Management Studio から「サーバー オブジェクト」-「バックアップ デバイス」とたどることで設定可能です。このバックアップデバイスにはどんなメリットがあるのでしょうか。実はそれほどメリットはないのですが、あえ…

差分バックアップとログバックアップの比較

SQL Server のバックアップには、「完全 (FULL)」と「差分 (DIFF)」、「ログ (LOG)」があります。差分とログバックアップは完全バックアップの後に実行しますが、どちらを優先して使うのがいいのでしょうか。結論から言えば、要件に依存するというつまらない…

デタッチしたファイルのログファイルは削除しても問題ない

SQL Server でデタッチしたデータベースのログファイル (ldf) は削除しても問題ありません。データファイル (mdf) さえあれば、再度アタッチすることができます。なお、ログファイルがない状態でアタッチする場合、アタッチ時にログファイルの指定をなしにし…

SQL クイズ: GROUP BY と COUNT(*) -- 解答編

結果は予想通りだったでしょうか、それとも意外でしたか? 問題編では、以下のテーブルに対して処理を実行しました。 SELECT * FROM Employee /* EmployeeID EmployeeName CountryID ----------- ------------- ---------- E001 山田 C001 E002 鈴木 C004 E0…

SQL クイズ: GROUP BY と COUNT(*) -- 問題編

ちょっと趣向を変えて SQL クイズでも出してみます。以下のテーブルがあるとき、変数に代入した COUNT(*) の結果はどうなるでしょうか。意外と驚く結果になるかもしれません。 SELECT * FROM Employee /* EmployeeID EmployeeName CountryID ----------- ---…

SQL Server Management Studio が遅いときの Tips

概要 SQL Server Management Studio (SSMS) の動作は鈍いです。高速でメモリも多い PC を使っても、その動作の緩慢さには我慢できません :-pそんなわけで、最近は A5M2 を使うことも多いのですが、 SSMS のスピードが極端に重い場合、以下の方法で (多少です…

インテリセンス付きの SQL エディタ

インテリセンス (入力支援・補完) 機能付きの SQL エディタを紹介します。 QueryCommander SQL Editor A5:SQL Mk-2 「QueryCommander SQL Editor」は、ソースコードが公開されているためいくらでもカスタマイズすることができます。「A5:SQL Mk-2」は、日本…

SQL Server Management Pack 6.0.6278.8 が公開

SQL Server 2000/2005 Management Pack の最新版が公開されています。 Version は 6.0.6278.8 になるようです。このバージョンでの更新内容は、 OpsMgr 2007 SQL MP version 6.0.6278.8 Released に記述があります。

照合順序の変更方法

既存のデータベースの照合順序を Japanese_CI_AS*1 から Japanese_90_BIN2*2 や Japanese_90_CS_AS*3 などに変更したい場合の手順メモです。照合順序を変更するには、データベースのプロパティ「オプション」から「照合順序」から可能ですが、この値を変更し…

SQL Server のログが小さくならない場合の対処法

概要 SQL Server のログ (ldf) を圧縮するには、 SQL Server Management Studio からデータベースを右クリックし「タスク」-「圧縮」-「データベース」や「ファイル」を実行します。しかし、ログの圧縮を実施しても、サイズが大きいままで小さくならない場合…

SQL Server のメモリ使用量

SQL Server のデフォルト設定では、スワップが発生しない程度にメモリを使用します。この動作は、 SQL Server を単体で動かす場合には適切ですが、 IIS など他のサーバも同一マシンで動かす場合に問題となることがあります。一台の PC で IIS と SQL Server …

msdb のサイズが大きい場合の対処法

SQL Server の msdb (msdbdata.mdf や msdblog.ldf)*1 を小さくしたい時は、 SQL Server 2005 のデータベース チューニング アドバイザ (DTA) クリーンアップ スクリプトの説明に記載されているスクリプトを実行すれば OK です。大きくなる原因は、データベ…

SQL Server メンテナンス用ツール

SQL Server メンテナンス・管理用ツールをメモしておきます。 SQL Server 2005 Best Practices Analyzer SQL Server 2000/2005 Management Pack SQL Server Health and History Tool (SQLH2) 内部テーブル SQL Server 開発チーム ブログの以下の記事も参考に…

SQL Server 2005 SP2 累積的な更新 6

SQL Server 2005 SP2 の累積的な更新 6 がダウンロードできるようになっています。適用すると 9.00.3228 になるようです。詳細については、 Cumulative update package 6 for SQL Server 2005 Service Pack 2 を参照してください。また、 SQL Server 2005 SP…

SQL の TOP (上位何件を取得) には括弧が必要だった

SQL の TOP*1 ですが、今まで文法を誤解していました。実は、 expression に括弧が必要だったのですね。 SELECT TOP (10) * FROM CUSTOMER 今まで括弧をつけずに書いていたのですが、 TOP (Transact-SQL) によると過去との互換性で残されているそうです。 旧…

SQL Server 2008 関連の日本語ドキュメント

SQL Server 2008 関連の日本語ドキュメントメモです。 ダウンロードの詳細 : 自習書「SQL Server 2008 の注目の新機能をイチ早く試してみよう! 」のダウンロード ダウンロードの詳細 : 自習書「SQL Server 2008 Reporting Services 入門編」のダウンロード …

SQL Server 2005 SP2 累積的な更新 5

SQL Server 2005 SP2 の累積的な更新 5 がダウンロードできるようになっています。適用すると 9.00.3215 になるようです。詳細については、 Cumulative update package 5 for SQL Server 2005 Service Pack 2 を参照してください。また、 SQL Server 2005 SP…

SQL Server 2005 の内部情報 (統計情報) を調べる方法

SQL Server 2005 の内部情報 (統計情報) を調べる方法は、 SQL Server: 隠れたデータを明らかにしてアプリケーションのパフォーマンスを最適化する -- MSDN Magazine, January 2008 が参考になります。また、 SQL Server の FAQ を Google で検索してもいく…

コネクションを強制的に切断する方法

SQL Server で他のコネクションを強制的に切断するには、「kill spid」とします。 spid を調べるには、「sp_who」ストアドプロシージャを使用します。強制的にコネクションを切断したい DB 名と dbname 列がマッチする spid を調べ、全て kill してください…

SQL Server で大容量のテーブルを扱う

SQL Server 2005 で、 1 つのテーブルに 1 億件程度のデータを入れようとしています。 bcp コマンドで一気に INSERT しているのですが、数千万件を超えたあたりから行の増加スピードが鈍ってきたように感じました。ということで、 SQL Server 2005 のパーテ…

DB 内のテーブル情報を取得する方法

SQL Server 2005 でデータベースの情報を取得するには、情報スキーマビュー (INFORMATION_SCHEMA) が便利です。 *1 情報スキーマビューには、以下のような種類があります。 INFORMATION_SCHEMA.SCHEMATA スキーマ情報 INFORMATION_SCHEMA.TABLE_PRIVILEGES …