代码之家  ›  专栏  ›  技术社区  ›  Mathias F

无法在脱机的数据库上调用sp\u detach\u db

  •  0
  • Mathias F  · 技术社区  · 15 年前

    我可以在sqlmanager中运行此命令来分离数据库

    ALTER DATABASE mydb SET OFFLINE WITH ROLLBACK IMMEDIATE
    
    GO
    
    dbo.sp_detach_db @dbname = N'mydb',@keepfulltextindexfile = N'false'
    

    当我使用相同的连接时,通过ado.net运行相同的commadn失败,并出现错误:

    The database 'mydb' can not be opened because it is offline 
    

    (错误从德语翻译过来。)

    ADO.NET代码是

                SqlCommand cmdOffline = new SqlCommand(@"ALTER DATABASE mydb SET OFFLINE WITH ROLLBACK IMMEDIATE");
                cmdOffline.Connection = prepareMasterDBConnection;
                cmdOffline.ExecuteNonQuery();
    
    
                SqlCommand cmdDetach = new SqlCommand(@"dbo.sp_detach_db @dbname = N'mydb',@keepfulltextindexfile = N'false'");
                cmdDetach.Connection = prepareMasterDBConnection;
                cmdDetach.ExecuteNonQuery();
    

    连接设置为master-db并打开。第一个命令成功地执行了。

    从ADO和SQL管理器调用代码有什么区别?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Brian    15 年前

    如果您的目标是在删除连接时避免发生冲突,而不是在分离前将其设置为脱机,那么我将使用命令, ALTER DATABASE mydb SET SINGLE_USER WITH ROLLBACK IMMEDIATE 而不是将其设置为脱机(并用 ALTER DATABASE mydb SET MULTI_USER )

        2
  •  0
  •   gbn    15 年前

    分离需要做一些事情才能分离。喜欢 s_detach 说(我的大胆)

    @skipchecks='skipchecks'

    指定是跳过还是运行 更新统计信息。SKIPCHECK是一个 nvarchar(10)值,默认值为 值为空。跳过更新 统计,请指定true。到 显式运行更新统计信息, 指定假。

    默认情况下,更新统计信息为 表演 更新有关的信息 表中的数据和中的索引 SQL Server 2005数据库引擎。 执行更新统计信息很有用 对于要移动到的数据库 只读媒体。

    当它离线时,你不能这样做…