我希望这个问题对某人来说很容易回答:)
我有一个看起来像这样的表(隐藏了不重要的列)
CREATE TABLE [dbo].[Log](
[LogID] [int] IDENTITY(1,1) NOT NULL,
--several other columns
[Name] [nvarchar](512) NOT NULL,
CONSTRAINT [PK_Log] PRIMARY KEY CLUSTERED
(
[LogID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
现在我对该表做了一些索引,这也涉及将Name
-column缩短到 256 宽度。但是当我更改此列时
ALTER TABLE Log ALTER COLUMN Name NVARCHAR(256) NOT NULL
GO
Run Code Online (Sandbox Code Playgroud)
数据库增长了一个不平凡的数量。(是的,我仔细检查了 - 这是我在这里所做的唯一更改)该表总共有 90746 个条目,在更改表之前,SSMS 表示大小为 247.56MB。
但是在这次更新之后,数据库增长到了 336.13MB。
不知道这在这里是否重要,但SELECT @@VERSION
得到Microsoft SQL Server …
我现在看着这个几分钟,找不到提到这个的线程。
我想从 SQL Server 上的数据库查询当前使用的空间和可用空间。当我在 SQL Server Management Studio 中打开数据库上的属性对话框时,我查询的数字应该与我看到的数字相匹配,如下所示:
所以我浏览了一下,发现我可以sys.database_files
像这样查询(从这里):
SELECT
DB_NAME() AS DbName,
name AS FileName,
size/128.0 AS CurrentSizeMB,
size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS INT)/128.0 AS FreeSpaceMB
FROM sys.database_files;
Run Code Online (Sandbox Code Playgroud)
这让我得到这个结果:
DbName 文件名 CurrentSizeMB FreeSpaceMB 数据库名称 数据库名称 17338.000000 16795.312500 数据库名 数据库名_日志 351.000000 331.234375
试图从上一个对话框中识别我的号码:
17338
并351
让我达到17689
对话框列出的大小16795.312500
几乎减少了半 MB我该怎么做才能获得与属性对话框显示的可用空间完全相同的数字?
我是否以错误的方式使用了查询/公式,或者由于某些舍入(将页面/范围转换为 MB...),此时根本不可能?