我试图理解这句话的作用
SUM(CAST(FILEPROPERTY(name, 'SpaceUsed') AS bigint) * 8192.)/1024 /1024
为什么8192之后会出现一个点?任何人都可以一点一点地解释这个问题。谢谢!
答案 0 :(得分:2)
整数后面的点.
将其隐式转换为十进制值。这很可能是强制输出也是十进制(不是整数)。在这种情况下,您只需要转换操作的一部分以强制输出为该类型。
这可能与字节/页面有关,因为数字8192
和1024
(最有可能转换为更大的单位)。也可以通过属性值来暗示这一点,该值表示文件使用了多少空间。
一个页面适合8kB,这意味着将页面值乘以8192
会将输出转换为正在使用的字节。然后按1024
两次成功将输出转换为千兆字节。
使用函数说明:
FILEPROPERTY
返回存储在数据库中的文件名的值。如果文件不存在,则返回空值CAST
用于将值转换为bigint类型SUM
是查询中用于对指定组的值求和的汇总函数答案 1 :(得分:2)
FILEPROPERTY()
返回int
值。请注意,SpaceUsed
属性不是以字节为单位,而是在“页面” - and in SQL Server a page is 8KiB中,因此乘以8192
以获得KiB的大小是合适的。
我以前从未遇到过没有小数位的尾随点 - the documentation for constants/literals in T-SQL没有给出这种用法的示例,但是读取它意味着它是decimal
:
decimal
常量由一串数字表示,这些数字未用引号括起来并包含小数点。
因此,将bigint
值乘以decimal
会产生decimal
值,如果您希望在除以1024
时保留小数位数,则可能需要此值(和然后再次1024
,虽然奇怪的是这些数字实际上是int
文字,所以操作只是截断分割。
我没有测试过,但你可以试试这个:
SELECT
SUM( FILEPROPERTY( name, 'SpaceUsed' ) ) * ( 8192.0 / 10485760 ) AS TotalGigabytes
FROM
...
如果您正在阅读代码并且需要进行研究以了解它正在做什么 - 通过添加解释性注释来帮助下一个阅读代码的人,以免他们不必进行研究,例如: “获取所有数据库使用的8KiB页面的总数,然后将其转换为千兆字节”。