をBIGINT私はこの文はCASTを使用して
SUM(CAST(FILEPROPERTY(name, 'SpaceUsed') AS bigint) * 8192.)/1024 /1024
また、なぜ8192の後にドットがあるんんかを理解しようとしていますか?誰でもこの質問を少しずつ説明できますか?ありがとう!
をBIGINT私はこの文はCASTを使用して
SUM(CAST(FILEPROPERTY(name, 'SpaceUsed') AS bigint) * 8192.)/1024 /1024
また、なぜ8192の後にドットがあるんんかを理解しようとしていますか?誰でもこの質問を少しずつ説明できますか?ありがとう!
FILEPROPERTY()
戻りの値を合計するクエリで使用される集計関数でありますint
値です。 SpaceUsed
プロパティはバイト単位ではなく、 "pages"(and in SQL Server a page is 8KiB)なので、8192
を掛けてKiBでサイズを取得するのが適切です。私は前に小数点以下の桁なしで最後のドットが発生したことがありません
- the documentation for constants/literals in T-SQLは、この使用法の例を与えるが、それはそれはdecimal
だ暗示読んでいない:
decimal
定数は、数字の文字列で表現されています引用符で囲まれておらず、小数点を含んでいます。それは奇妙だけれども
は、このようにこれらの数字が実際にあることを、あなたは1024
(と再び1024
)で割ったときに小数点以下の桁を維持したい場合に望ましいかもしれdecimal
値を、もたらすであろうdecimal
によってbigint
値を掛けますint
リテラルなので、操作は切り捨て除算にすぎません。私はそれをテストしていませんが、あなたはちょうどこれを試みることができる
:
SELECT
SUM(FILEPROPERTY(name, 'SpaceUsed')) * (8192.0/10485760) AS TotalGigabytes
FROM
...
あなたがコードを読んでいると、あなたはそれをやっているかを理解するための研究を行う必要がある場合 - 次のために好意を行います研究をすることを避けるために説明コメントを追加してコードを読む人、例えば"すべてのデータベースで使用されている8KiBページの総数を取得し、それをギガバイトに変換します"。
整数の後のドット.
は暗黙的に10進数値に変換します。これは出力を10進数(整数ではなく)にすることが最も一般的です。この場合、出力を強制的にその型に変換するためには、操作の一部のみを変換する必要があります。
これは、数字が8192
と1024
(ほとんどの場合、より大きな単位に変換する可能性があるため)バイト/ページと関係している可能性があります。これは、ファイルによってどれくらいのスペースが使用されているかを示すプロパティの値によって示されます。
ページは8kB以内に収まります。これは、ページの値に8192
を掛けると出力が使用されているバイトに変換されることを意味します。次に、1024
で2回に分けて、出力をギガバイトに変換します。使用される関数に
説明:
FILEPROPERTY
データベース内に格納されたファイル名の値を返します。ファイルが存在しない場合、ヌル値が返されCAST
はSUM
をBIGINT型に値をキャストするためのものである指定されたグループ
SQL Serverには「double」型がありません。ドットはIEEE-754浮動小数点数ではない 'decimal'値用です(そのタイプを' 'double'"と呼ぶのは間違いです)。あなたのコメントのために@Daiありがとう。 – Dai
私は 'double'データ型について言及しませんでした。私は倍精度値だけを言及しています。 'decimal'データ型は精度と位取りで構成されていますか? –
いいえ、 'decimal'型は個々の10進数字(したがって名前)を格納しますが、IEEE-754(" float'または "' single ")とは異なる内部表現です。つまり、正確な小数点を格納できますIEEE-754はおおよその値を格納しますが、http://stackoverflow.com/questions/1209181/what-represents-a-double-in-sql-server – Dai