私のデータベースは元々、1つのテーブルでファイルストリームを使用していました。ここでは触れない理由により、ファイルストリームの使用をやめることにしました。したがって、filestreamedテーブルをfilestreamを使用しない新しいテーブルにコピーするマイグレーションを作成し、古いテーブルを削除して、新しいテーブルの名前を変更しました。これまでのところすべて良い。
ここで、ファイルストリームファイルとファイルグループを削除します。そしてSQLサーバーは私をさせません:
ファイル 'MyFilestream'は空ではないため削除できません。
次のクエリを実行しました。
select * from sys.tables t
join sys.data_spaces ds on t.filestream_data_space_id = ds.data_space_id
-- and ds.name = 'MyFSGroup'
コメントアウトもds.name
フィルター、ゼロレコードを取得します。
この古い、未回答の質問 のように、私はこのクエリを実行しました:
exec sp_helpfilegroup 'MyFSGroup'
そして戻ってきました:
groupname groupid filecount
--------- ------- ---------
MyFSGroup 2 0
私は解決策と回避策を求めてグーグル検索しました。私の知る限り、このファイルをまだ使用しているデータベースのどこにもテーブルはありませんが、削除することはできません。私もSQLサービスを再起動してみましたが、だまされてはいけません。
Filestreamファイルをまだ使用しているものを見つけるにはどうすればよいですか、またどのようにドロップしますか?
編集:ああ、ここに考えがあります:データベースには「完全な」復旧モデルがあります。それは何か関係があるのでしょうか?
確かに、それが答えでした。私はdbリカバリモデルを「シンプル」に設定し、ファイルストリームデータがクリアされるのを1分待ってから、ファイルストリームファイルとファイルグループを削除しました。