Excel VBAでSQL ServerからRecordSetを受け取るときなどに,どうみてもコードは問題ないのに 「オブジェクトが閉じている場合は、操作は許可されません。」 というエラーが出ることがある.
ストアド内で複数のSQL文を使っている場合などに出る.
一時テーブルやテーブル変数を使う場合は複数のSQL文になるのが普通なのでこのエラーが出がちである.
SQLOLEDB,SQLNCLI どちらも出る.
この場合,「SET NOCOUNT ON」を付けるとエラーが出なくなる.
Excel VBAでSQL ServerからRecordSetを受け取るときなどに,どうみてもコードは問題ないのに 「オブジェクトが閉じている場合は、操作は許可されません。」 というエラーが出ることがある.
ストアド内で複数のSQL文を使っている場合などに出る.
一時テーブルやテーブル変数を使う場合は複数のSQL文になるのが普通なのでこのエラーが出がちである.
SQLOLEDB,SQLNCLI どちらも出る.
この場合,「SET NOCOUNT ON」を付けるとエラーが出なくなる.
異なるSQL Server間でバックアップを復元した時にアクセスできなくなり,ログインのプロパティーなどでユーザーマッピングを割り当てようとすると,「ユーザー’test’の作成に失敗しました。」~「ユーザー、グループ、またはロール’test’は現在のデータベースに既に存在します。」
というようなエラーメッセージが表示されてしまうことがある.

・不明なユーザー一覧を表示する方法
USE データベース名
EXEC sp_change_users_login ‘Report’
・ユーザーマッピングの修復方法
USE データベース名
EXEC sp_change_users_login ‘Update_One’, ‘test’, ‘test’
(EXEC sp_change_users_login ‘Update_One’, ‘現在のDBに存在するユーザー名’, ‘SQL Serverログイン名’)
参考:
http://www.microsoft.com/japan/sqlserver/2005/ssj/tips/03.mspx
TableAとTableBを結合した結果を使ってTableAの行を削除
(別のテーブルの値を使って行を削除)
DELETE a
FROM TableA AS a
INNER JOIN TableB AS b ON a.ID1 = b.ID1
WHERE b.a2 = 1
DELETE a の部分をSELECT * に変えれば削除行の確認ができる.