SQL

SQL Server 2008 SP 1 累積的な更新 2 と各種アドイン

SQL Server 2008 Service Pack 1 用の 累積的な更新 2 が公開されていました。適用すると 10.00.2714 になるようです。詳細は、以下を参照してください。 Cumulative update package 2 for SQL Server 2008 Service Pack 1 The SQL Server 2008 builds that …

SQL Server 2008 SP1

気づいたら SQL Server 2008 SP1 が公開されていました。主に、累積的な更新 1 から累積的な更新 3 の内容が含まれているようです。 (累積的な更新 4 の内容を含んだバージョンは、累積的な更新 5 で公開されるのでしょうか……。) 詳細は、以下を参照してくだ…

SQL Server 2008 累積的な更新 4

SQL Server 2008 累積的な更新 4 が公開されていました。適用すると 10.00.1790 になるようです。詳細は、以下を参照してください。 Cumulative update package 4 for SQL Server 2008 SQL Server 2008 以降にリリースされた SQL Server 2008 のビルド The S…

Microsoft SQL Server 2008 オンライン ブック (2009 年 1 月)

Microsoft SQL Server 2008 オンライン ブック (2009 年 1 月) (SQL Server Books Online) が公開されていました。新機能を中心にドキュメントが修正されているようです。

Transact-SQL で改行コードを入力する方法

SQL Server で改行文字を INSERT (UPDATE) したいなと、調べたときのメモです。 C++ や C# などでよく使うエスケープシーケンス「\n」ではないので、ちょっと忘れやすいですね。改行文字は、 CR LF のアスキーコード「NCHAR(13) + NCHAR(10)」を使用します。…

DBCC CHECKDB を実行する間隔

DBCC CHECKDB を実行する間隔はどれくらいが良いのだろうと調べていたら、以下の文書にヒットしました。 SQL Server 効果的なデータベース メンテナンスのヒント 不本意な DBA の皆さんは、データベースの完全バックアップを作成するたびに DBCC CHECKDB を…

テーブルのスキーマを変更するとエラーメッセージ「変更の保存が許可されていません」が表示されたときの解決法

SQL Server Management Studio でテーブル構造を変更しようと「デザイン」から修正を行ったところ、「変更の保存が許可されていません」というエラーメッセージが出力されてしまいました。どうも、テーブルの再作成が発生する場合にこのメッセージが表示され…

SQL Server 2005 Best Practices Analyzer

SQL Server 2005 Best Practices Analyzer というのがあるのを初めて知りました。 SQL Server の最適な設定などを教えてくれるので、良さそうですね。……が、 SQL Server 2008 に対応した版はでないんですかねー。

SQL Server 2008 の累積的な更新プログラム パッケージ 3

SQL Server 2008 の累積的な更新プログラム パッケージ 3 (Cumulative update package 3) が公開されていました。バージョンは、適用すると「10.00.1787」になるようです。 SQL Server 2008 の累積的な更新プログラム パッケージ 3 について SQL Server 2008…

インデックスの断片化状況を調べる

毎回、インデックスの断片化状況を調べる方法を忘れるのでメモしておきます。以下の SQL を実行すれば、一定の割合 (以下では 3 %) 以上断片化したインデックスの名称がわかります。表示する断片化率の閾値を変更するには、 avg_fragmentation_in_percent と…

SQL Server 2008 System Views Map

SQL Server 2008 System Views Map が公開されました。 SQL Server のシステムビューを調べるときに便利そうです。

SQL Server 2000/2005 から 2008 への移行時注意点

SQL Server のデータベースを 2000/2005 から 2008 へアップグレードした場合、「DBCC UPDATEUSAGE」を実行した方がいいんですね。知らなかったです。 *1 アップグレードされたデータベースで DBCC UPDATEUSAGE を実行することをお勧めします。以前のバージ…

SQL Server 2008 の累積的な更新プログラム パッケージ 2

SQL Server 2008 の累積的な更新プログラム パッケージ 2 が公開されています。 SQL Server 2008 の累積的な更新プログラム パッケージ 2 について SQL Server 2008 のリリース以降にリリースされた SQL Server 2008 のビルドについて (ちなみに、 SQL Serve…

SQL Server ユーザ転送など Tips メモ

データベースを復元したときにユーザが不明になった場合など、管理系の Tips をメモしておきます。人に頼めればいいんですが、知っていると役立ちそうなときもあるかもしれないので。 ログイン アカウントの転送 SQL Server のインスタンス間でログインおよ…

SQL Server 2005 SP3 が登場

SQL Server 2005 Service Pack 3 の提供が開始されました。すでに SQL Server 2008 がでていますが、まだまだ 2005 を使用している環境も多いと思います。忘れずに適用しておきましょう。マニュアル (Books Online) も更新されています。 SQL Server 2005 Se…

SQL Server 運用時の Tips

チェックサムや壊れた DB の復旧手順、データベース圧縮時に発生するインデックス断片化など興味深い内容が解説されています。 SQL に関する Q&A: I/O エラー、データベース ミラーリングなど Microsoft SQL Server 2000 Index Defragmentation Best Practic…

The Database Programmer

The Database Programmer という blog 記事を読みました。日本の blog でこんな風にデータベース設計 (テーブル設計) や構築ノウハウなどを紹介している例って余り見かけないですよね。 Comprehensive Table of Contents Table Design Patterns

SQL Server 統計の非同期的自動更新

SQL Server 2005/2008 では、統計情報を非同期で更新することが出来ます。 SQL Server Management Studio から設定する場合、データベースのオプションを開き、「統計の非同期的自動更新」を True にします。 SQL から設定する場合、 AUTO_UPDATE_STATISTICS…

DB の timestamp 列を考慮せずに diff を取得する方法

データベースの差分 (diff) を取得するには、 Visual Studio Team System (VSTS) の Database 機能が便利です。このツールでデータベースを丸ごと比較できますが、テーブル内に timestamp 列が含まれる場合、結果が少し見にくくなります。timestamp 列を無視…

行番号を付けるときの工夫

SQL Server の ROW_NUMBER() は OVER 句と共に使うことが出来ます。詳しい使用法は Books Online (MSDN) を参照してもらった方が確実ですが、以下のようなイメージです。 ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID) これを FULL OUTER JOIN (完全外部…

TransactionScope (MSDTC) 使用時のエラー対策

TransactionScope を使っていると、開発マシンでは正常に動作するのに、本番機など別マシンでは TransactionManagerCommunicationException が発生することがあります。これは、 DB サーバが別マシンにある場合、分散トランザクションの設定が必要なことから…

月曜日の日付を取得

ある日付の月曜日時点の日付を求めたい場合があると思います。やり方はいくつかありますが、その中の一つを紹介します。 DECLARE @varDate datetime SET @varDate = -- 好きな日付 -- 月曜日付を取得 (月曜ならその日、それ以外なら過去直近の月曜) select c…

SQL Server 徹底検証シリーズ

SQL Server 徹底検証シリーズには、パフォーマンスに関する情報などが公開されています。SQL Server とは直接関係ないですが、 Web高速化 | パフォーマンスチューニングblog にもいつか記事があります。

SQL Server 拡張プロパティについて

SQL Server で拡張プロパティを使う場合のメモです。主に以下の 4 種類のストアドプロシージャを使います。テーブルや列などに日本語名を付けておくと、 ERD の自動生成時わかりやすくなるのでおすすめです。 拡張プロパティを表示 fn_listextendedproperty …

N 件のレコードをランダムに取得する方法

N 件のレコードをランダムに取得するには、以下の SQL を使用します。 NEWID() の結果で ORDER BY することで、結果的にテーブルがシャッフルされたのと同じになります。その後、必要な件数を上から取得 (TOP) します。 SELECT TOP(20) * FROM Customers ORD…

トレース一覧 (SQL Server Profiler) を確認するための SQL

トレース一覧を確認するには、以下の SQL を使います。 select * from fn_trace_getinfo(0) 知らない間に多数のトレースが実行されていてパフォーマンスが低下するという場合もありますので、気になる場合はチェックしてみた方がいいです。

ストアドプロシージャのソースコードを確認

SQL Server でストアドプロシージャのソースコードを確認したいとき、 SQL Server Management Studio を使用するのが簡単です。もし SQL で実行したい場合は以下のように記述します。なお、昔は sys.sql_modules ではなくて syscoments を参照していました。…

IDENTITY (自動採番; オートナンバー) 使用時に忘れやすいこと

IDENTITY が付与されたテーブルにデータを登録するとき、元の ID を保持したまま (もしくは好きな ID で) INSERT を実行したい場合があります。そんなときは、以下のように「SET IDENTITY_INSERT」を使用します。意外と忘れやすいので、データ移行時などは気…

yyyyMMdd 形式の文字列を日付型に変換する方法

yyyyMMdd 形式 (文字列で区切りなしの 8 桁数字) を日付型 (datetime) に変換するには、以下のような方法があります。 '20080102' の部分は、変数などに置き換えて使ってください。 SELECT CONVERT(datetime, '20080102', 112)

日付型を yyyyMMdd 形式に変換する方法

日付型 (datetime) の変数を yyyyMMdd 形式 (文字列で区切りなしの 8 桁数字) に変換するには、以下のような方法があります。 GETDATE() の部分を変数やテーブルの列名に変更すれば、どんな日付型でも変換できますね。 SELECT CONVERT(nvarchar(8), GETDATE(…