Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何返回到多用户模式_Sql_Sql Server_Tsql_Multi User_Single User - Fatal编程技术网

Sql 如何返回到多用户模式

Sql 如何返回到多用户模式,sql,sql-server,tsql,multi-user,single-user,Sql,Sql Server,Tsql,Multi User,Single User,我的问题是: IF EXISTS(%some query%) BEGIN BEGIN TRY ALTER DATABASE [MyDatabase] SET single_user WITH ROLLBACK IMMEDIATE; --do something --throw some exception END TRY BEGIN CATCH --here I want to set

我的问题是:

IF EXISTS(%some query%)
BEGIN
    BEGIN TRY       

        ALTER DATABASE [MyDatabase] SET single_user WITH ROLLBACK IMMEDIATE;

        --do something
        --throw some exception

    END TRY
    BEGIN CATCH

        --here I want to set database back to multi_user

        RAISERROR ('DBErrorMessage', @ErrorSeverity, @ErrorState);
    END CATCH
END
将数据库设置回多用户的最佳方法是什么?我担心最直接的方法可能会导致

数据库“MyDatabase”已打开,一次只能有一个用户

例外

我最直截了当的意思是:

ALTER DATABASE [MyDatabase] SET MULTI_USER
“当前用户当前已连接到它”可能是SQL SERVER MANAGEMENT STUDIO窗口本身

选择masterdatabase,然后运行

ALTER DATABASE TherapyDatabaseWTS
SET MULTI_USER;
GO
或者,如果您想使用SQLServerManagementStudio,请按照

Right click Database >> Properties >> Options >> State >> RestrictAccess 
                                                  >> Choose Multi_user and click OK
“当前用户当前已连接到它”可能是SQL SERVER MANAGEMENT STUDIO窗口本身

选择masterdatabase,然后运行

ALTER DATABASE TherapyDatabaseWTS
SET MULTI_USER;
GO
或者,如果您想使用SQLServerManagementStudio,请按照

Right click Database >> Properties >> Options >> State >> RestrictAccess 
                                                  >> Choose Multi_user and click OK

如果你简单地说

ALTER DATABASE [MyDatabase] SET MULTI_USER
接球后?它不应该找到任何活动用户,因为您是程序/存储过程中的单个用户


另外,您是否尝试过在CATCH块中使用ROLLBACK将所有内容都放在事务中?

如果简单地将

ALTER DATABASE [MyDatabase] SET MULTI_USER
接球后?它不应该找到任何活动用户,因为您是程序/存储过程中的单个用户


另外,您是否尝试过在CATCH块中使用ROLLBACK将所有内容放入事务中?

我刚刚做了一个快速测试:

BEGIN TRY       

    ALTER DATABASE DB1 SET SINGLE_USER
    SELECT 1/0 --it generates an error

END TRY
BEGIN CATCH
   ALTER DATABASE DB1 SET MULTI_USER 
END CATCH

它似乎正在工作,批处理完成后,DB1仍处于多用户模式…

我刚刚做了一个快速测试:

BEGIN TRY       

    ALTER DATABASE DB1 SET SINGLE_USER
    SELECT 1/0 --it generates an error

END TRY
BEGIN CATCH
   ALTER DATABASE DB1 SET MULTI_USER 
END CATCH

它似乎正在工作,在批处理完成后,DB1仍然处于多用户模式…

已经有一段时间了,但我相信带有立即回滚的
选项可以告诉您,无论发生什么情况,您都希望此操作成功。正常行为会一直阻塞,直到所有正在运行的事务成功完成

另外,当数据库已经是多用户模式时,将其设置为多用户模式是安全的

但是,如果您想真正确定,请使用嵌套的try-catch块。第一个用于处理移动到单用户模式的任何错误,而内部一个用于处理在单用户模式下发生的错误

看 及

关于完整性的最后几点注意事项:

1) 如果错误严重,您的连接将被关闭,数据库仍将处于单用户模式


2) 您应该有一个测试实例,在那里您可以安全地尝试这些东西,这样您就可以了解生产中将要发生的事情。

已经有一段时间了,但我相信带有立即回滚的
选项可以告诉您,无论发生什么情况,您都希望它成功。正常行为会一直阻塞,直到所有正在运行的事务成功完成

另外,当数据库已经是多用户模式时,将其设置为多用户模式是安全的

但是,如果您想真正确定,请使用嵌套的try-catch块。第一个用于处理移动到单用户模式的任何错误,而内部一个用于处理在单用户模式下发生的错误

看 及

关于完整性的最后几点注意事项:

1) 如果错误严重,您的连接将被关闭,数据库仍将处于单用户模式


2) 您应该有一个测试实例,在那里您可以安全地尝试这些东西,这样您就可以了解生产中将要发生的事情。

有时可能是这样,但是如果我想从我的程序中这样做呢?我的问题是,当设置单用户失败并引发异常时,数据库已经处于多用户状态,为什么要设置这是一个卸载场景。我想将
[MyDatabase]
设置为
单用户
,然后删除数据库。如果在删除过程中出现异常,我想将其设置回
multi_user
。这就是我的观点,首先DB是多用户的,然后您尝试设置为单用户,但失败了,所以DB会自动在多用户状态下重新生成?不是真的。它成功地设置为单用户,然后我尝试删除db,但失败了,db保持在单用户模式。有时可能是这样,但如果我想从我的程序中执行此操作,该怎么办?我的问题是,当设置单用户失败并引发异常时,数据库已经处于多用户状态,为什么要设置这是一个卸载场景。我想将
[MyDatabase]
设置为
单用户
,然后删除数据库。如果在删除过程中出现异常,我想将其设置回
multi_user
。这就是我的观点,首先DB是多用户的,然后您尝试设置为单用户,但失败了,所以DB会自动在多用户状态下重新生成?不是真的。成功设置为单用户,然后我尝试删除db,但失败,db保持单用户模式。是否保证我的用户会使用db?如果可以保证,那么这个变体完全适合我。我认为在ms sql中禁止在事务内部使用
ALTER DATABASE
。如果可以将其设置为多用户,那么当前登录的用户应该是数据库中的唯一用户。可以保证数据库将由我的用户使用吗?如果可以保证,那么这个变体完全适合我。我认为在ms sql中禁止在事务内部使用
ALTER DATABASE
。如果可以将其设置为多用户,那么当前登录的用户应该是数据库中的唯一用户。