SQL Server 数据库状态 24、1024 和 65544 的名称是什么?

Dav*_*ras 2 sql-server

使用以下查询:

SELECT Name, Status FROM dbo.sysdatabases
WHERE name IN ( 'db_name' )
Run Code Online (Sandbox Code Playgroud)

在某些情况下,我得到状态 = 24,有时是 1024,有时是 65544

我看到,即使状态为 24,我也可以从 SQL Management Studio 打开并检查数据库的内容,但不能从检查状态至少为 1024 的旧应用程序中检查。

当我要求 DBA 解决这个问题时,他们运行了一些魔法脚本,状态上升到 65544 并且一切正常,我希望这些状态有一些名称,而不仅仅是像 24、1024、65544 这样的数字。

我已经检查过这个链接:sysdatabases

其中包含此表:

状态位,其中一些可以由用户使用 ALTER DATABASE 设置(只读、离线、单用户等):

1 = 自动关闭;用 ALTER DATABASE 设置。

4 = 选择进入/批量复制;使用 ALTER DATABASE RECOVERY 设置。

8 = 截断。登录chkpt;使用 ALTER DATABASE RECOVERY 设置。

16 = 撕页检测,通过 ALTER DATABASE 设置。

32 = 加载。

64 = 预恢复。

128 = 恢复。

256 = 未恢复。

512 = 离线;用 ALTER DATABASE 设置。

1024 = 只读;用 ALTER DATABASE 设置。

2048 = dbo 只使用;使用 ALTER DATABASE RESTRICTED_USER 设置。

4096 = 单用户;用 ALTER DATABASE 设置。

32768 = 紧急模式。

4194304 = 自动收缩,使用 ALTER DATABASE 设置。

1073741824 = 完全关闭。

但我在那里没有看到 24 和 65544 :(

And*_*ren 7

其他是记录标志的组合,例如 24 是 16 和 8。

这是一种模拟可选参数的方法,在例如 C iirc 中使用,数字1, 2, 4, 8等的结构是这样的,因为它们对应于以任何唯一方式组合创建唯一数字的二进制值。接受它们的函数然后使用位掩码来提取每个单独的数字。例如,如果您将值 6 发送给一个函数,那么我们知道这是 4 和 2 的组合,要使用位掩码找出这一点,我们会这样做:

    0110 // 6
AND 0010 // 2
 == 0010

    0110 // 6
AND 0100 // 4
 == 0100
Run Code Online (Sandbox Code Playgroud)

两个语句都将被评估为true,因此我们已经找到了各个值。

注意:在现实世界中,我们将遍历从 1、2、4、8、16 等到整数的最大值(或参数设置的任何数据类型)的所有值。