SQLServerテーブルのデザイン変更が保存できないとき

テーブルのデザイン変更が保存できない。

やりたいことは
列を途中に挿入したい。

変更の保存が許可されていません。
行った変更には、次のテーブルを削除して再作成することが必要になります。
再作成できないテーブルに変更を行ったか、
テーブルの再作成を必要とする変更を保存できないようにするオプションが有効になっています。

ツール > オプション > Designers
テーブルの再作成を必要とする変更を保存できないようにする

チェックを外す

で、
デザイン画面での変更が保存できるようになった。

変更スクリプトの作成 で保存時にSQLServerが
やっている事を見てみると、先の警告メッセージで散々登場している「再作成」を
している。このスクリプトを取る(作成する)だけでも使える。。。

1.新しいデザイン内容でテーブル作成(新テーブル)
CREATE TABLE
2.変更したいテーブル(旧テーブル)から新テーブルにデータコピー
Insert
3.旧テーブルの削除
DROP TABLE
4.新テーブルのテーブル名変更
sp_rename
5.インデックスの作成

Service Brokerが有効になっているかを確認するには?

ENABLE_BROKER するように言われたけど。。。

ALTER DATABASE [dbname] SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE

WITH ROLLBACK IMMEDIATE を付けないと、
使用中のデータベースに対してはいつまでたっても終わらない

で、確認方法です。
Service Broker がアクティブかを判断するには、
sys.databasesカタログビューの is_broker_enabled列を確認します。

select name, is_broker_enabled from sys.databases

is_broker_enabled
1 = このデータベースのブローカは現在メッセージを送受信中です。
0 = このデータベースでは、すべての送信メッセージは転送キューにとどまり、受信メッセージはキューに配置されません。

参考サイト
http://www.sql-server-performance.com/forum/threads/how-to-see-if-service-broker-is-enabled.26046/

sys.databasesについての説明
http://lab.technet.microsoft.com/ja-jp/library/ms178534.aspx

SQLServerでインデックスの使用を指定する

SQLServerは、最適なものを自動で採用して、

自動で最高の結果をだしてくれると思い込んでいた。

初めて、想定外のインデックス使用に出会った。

で、明示的に指定したいので、調べた。あった。あった。

with (index (インデックス名))

こんな感じ

select * from hoge
with (index (ix_hoge))
where field1=hoge

http://msdn.microsoft.com/ja-jp/library/ms187731.aspx

N. INDEX オプティマイザー ヒントを使用する

N. Using the INDEX optimizer hint

英語サイトだとこんな感じのキーワード

参考サイト
INDEXを使わせるには?(オプティマイザヒントを使用した実行計画の強制)

【SQLServer】 SELECT文でインデックスを指定する方法

SQLServer コマンドラインでバイナリデータをエクスポート/インポート

BCPユーティリティで、ファイルに出力
データのエクスポート データベースからファイル
>bcp “select * from dbname.dbo.tablename where ID=19” queryout “exp19.dat” -S “192.168.0.11” -U sa -P Password -c

フォーマットファイルの出力 データベースからXMLファイルの作成(インポート時に使用する)
>bcp dbname.dbo.tablename format nul -S “192.168.0.11” -U sa -P Password -c -x -f Format.xml

データのインポート ファイルからデータベース
>bcp dbname.dbo.tablename in “exp19.dat” -S “192.168.0.11” -U sa -P Password -f Format.xml

ちなみに、コマンドプロンプトからSQL文を実行するには
sqlcmdユーティリティを使用する
>sqlcmd -S “192.168.0.11” -U sa -P Password -d dbname -Q “delete from tablename where ID=21”

ちなみに、その2 プログラムでのバイナリ項目の操作

[ASP.NET]データベースに登録したバイナリ・データを表示するには?

[ASP.NET]バイナリ・データをアップロードしてデータベースに登録するには?

PDF用のフルテキストインデックスiFilterのx86版は、AcrobatReader9.xに入っている

SQLServer FullTextIndexで使用するPDF用のアドイン(?)
iFilterをダウンロードしようと思ってADOBEサイトを見ても6.0しかない。

x64版は、バージョン9が出てるのに。

そのダウンロードサイトを読んでみると、x86版は、AdobeReaderに入っているよ。

確かに、AdobeReader9.5を入れてみたら動いた。

AdobeReaderXには、入ってない模様。(試してないけど)

SQLServer2008 ログの切り捨て

SQLServer2008は、DUMPコマンドが無い!

いままで、ログの切り捨て、圧縮は、以下のコマンドで行っていたが、
どうすればいいの?

今までは、
DUMP TRANSACTION NorthWind WITH NO_LOG
DBCC SHRINKDATABASE (NorthWind)

スクリプトにすると、こんな感じになった。
–SQLServer2008
USE [NorthWind]
DBCC SHRINKFILE (N’NorthWind’ , 0, TRUNCATEONLY)
DBCC SHRINKFILE (N’NorthWind_log’ , 0, TRUNCATEONLY)

これは引き続きやっておいた方がよさそうだ
use master
DBCC SHRINKDATABASE (NorthWind)

参考
トランザクションログを圧縮する方法