データベースからファイルストリームを削除しようとしているので、以下を実行する必要があります
以下を削除する方法を教えてください。
ALTER TABLE AMGR_Documents_Tbl ADD UId uniqueidentifier ROWGUIDCOL NOT NULL DEFAULT( NEWID() );
ALTER TABLE AMGR_Documents_Tbl ADD CONSTRAINT AMGR_Documents_Tbl_UId_Unique UNIQUE( UId );`
次に、おそらく次のコードであるファイルストリームのない列を追加する必要があります:
ALTER TABLE AMGR_Letters_Tbl ADD TextCol1 varbinary( max );
Update [AMGR_Letters_Tbl]
SET TextCol1 = TextCol;
ALTER TABLE [AMGR_Letters_Tbl] DROP COLUMN TextCol;
/*Now i just rename the column*/
また、FTSインデックスを修正する必要があります(これは理解できません)。その後、次のようになります。
IF 0 != INDEXPROPERTY( OBJECT_ID( 'AMGR_Letters_Tbl' ), 'Letters_Record_Id', 'IsFulltextKey' ) BEGIN
EXEC sp_fulltext_table AMGR_Letters_Tbl, 'drop'
END
/****** I need to fix filestream on both tables: ******/
/****** This is what the whole thing looks like (for 2 tables): ******/
IF @@VERSION NOT LIKE 'Microsoft SQL Server 2005%' AND ISNULL(SERVERPROPERTY ('FilestreamEffectiveLevel'),0) > 0 BEGIN
if not exists ( select name from syscolumns where id IN
( select Id from sysobjects where id = object_id(N'[dbo].[AMGR_Letters_Tbl]') and OBJECTPROPERTY(id, N'IsUserTable') = 1
) AND name = 'UId' )
BEGIN
-- add unique ROWGUIDCOL column
ALTER TABLE AMGR_Letters_Tbl ADD UId uniqueidentifier ROWGUIDCOL NOT NULL DEFAULT( NEWID() );
ALTER TABLE AMGR_Letters_Tbl ADD CONSTRAINT AMGR_Letters_Tbl_UId_Unique UNIQUE( UId );
EXEC( 'ALTER TABLE AMGR_Letters_Tbl ADD TextCol1 varbinary( max ) FILESTREAM NULL' );
-- will need to re-create FTS index after
IF 0 != INDEXPROPERTY( OBJECT_ID( 'AMGR_Letters_Tbl' ), 'Letters_Record_Id', 'IsFulltextKey' ) BEGIN
EXEC sp_fulltext_table AMGR_Letters_Tbl, 'drop'
END
EXEC( 'UPDATE AMGR_Letters_Tbl SET TextCol1 = TextCol;' );
ALTER TABLE AMGR_Letters_Tbl DROP COLUMN TextCol;
EXEC sp_rename 'AMGR_Letters_Tbl.TextCol1', 'TextCol', 'COLUMN';
EXEC ('DBCC CLEANTABLE (0,''AMGR_Letters_Tbl'',1000) WITH NO_INFOMSGS;');
END
END
GO
------------------------------------------------------------
IF @@VERSION NOT LIKE 'Microsoft SQL Server 2005%' AND ISNULL(SERVERPROPERTY ('FilestreamEffectiveLevel'),0) > 0 BEGIN
if not exists ( select name from syscolumns where id IN
( select Id from sysobjects where id = object_id(N'[dbo].[AMGR_Documents_Tbl]') and OBJECTPROPERTY(id, N'IsUserTable') = 1
) AND name = 'UId' )
BEGIN
-- add unique ROWGUIDCOL column
ALTER TABLE AMGR_Documents_Tbl ADD UId uniqueidentifier ROWGUIDCOL NOT NULL DEFAULT( NEWID() );
ALTER TABLE AMGR_Documents_Tbl ADD CONSTRAINT AMGR_Documents_Tbl_UId_Unique UNIQUE( UId );
EXEC( 'ALTER TABLE AMGR_Documents_Tbl ADD Data1 varbinary( max ) FILESTREAM NULL' );
-- will need to re-create FTS index after
IF 0 != INDEXPROPERTY( OBJECT_ID( 'AMGR_Documents_Tbl' ), 'AMGR_Documents_Record_Id', 'IsFulltextKey' ) BEGIN
EXEC sp_fulltext_table AMGR_Documents_Tbl, 'drop'
END
EXEC( 'UPDATE AMGR_Documents_Tbl SET Data1 = Data;' );
ALTER TABLE AMGR_Documents_Tbl DROP COLUMN Data;
EXEC sp_rename 'AMGR_Documents_Tbl.Data1', 'Data', 'COLUMN';
EXEC ('DBCC CLEANTABLE (0,''AMGR_Documents_Tbl'',1000) WITH NO_INFOMSGS;');
END
END
GO
FILESTREAM機能をデータベースから完全に削除するには、次の手順を実行する必要があります。
ウォークスルー ここをクリックして、彼の手順に従ってください
別の注:FileStreamファイルにデータがある場合、それを削除することはできません。 sp_filestream_force_garbage_collection
残念ながら、これは機能します> = SQL Server 2012
その修正については、次のことができます ここで全体を参照
それが機能しない場合。そのためのバックアップを作成してみてください。これがFileStreamファイルをクリアした方法です。
クリアされると、FileStream FileとFILESTREAMファイルグループを削除できます。
データベースのインデックスが非常に大きい場合は、関数とビューを確認する必要があります。 (そのバックアップを持っている)