2016-11-16 4 views
3

をBIGINT私はこの文はCASTを使用して

SUM(CAST(FILEPROPERTY(name, 'SpaceUsed') AS bigint) * 8192.)/1024 /1024 

また、なぜ8192の後にドットがあるんんかを理解しようとしていますか?誰でもこの質問を少しずつ説明できますか?ありがとう!

答えて

2

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ページの総数を取得し、それをギガバイトに変換します"。

2

整数の後のドット.は暗黙的に10進数値に変換します。これは出力を10進数(整数ではなく)にすることが最も一般的です。この場合、出力を強制的にその型に変換するためには、操作の一部のみを変換する必要があります。

これは、数字が81921024(ほとんどの場合、より大きな単位に変換する可能性があるため)バイト/ページと関係している可能性があります。これは、ファイルによってどれくらいのスペースが使用されているかを示すプロパティの値によって示されます。

ページは8kB以内に収まります。これは、ページの値に8192を掛けると出力が使用されているバイトに変換されることを意味します。次に、1024で2回に分けて、出力をギガバイトに変換します。使用される関数に


説明:

  • FILEPROPERTYデータベース内に格納されたファイル名の値を返します。ファイルが存在しない場合、ヌル値が返され
  • CAST
  • SUMをBIGINT型に値をキャストするためのものである指定されたグループ
+0

SQL Serverには「double」型がありません。ドットはIEEE-754浮動小数点数ではない 'decimal'値用です(そのタイプを' 'double'"と呼ぶのは間違いです)。あなたのコメントのために@Daiありがとう。 – Dai

+0

私は 'double'データ型について言及しませんでした。私は倍精度値だけを言及しています。 'decimal'データ型は精度と位取りで構成されていますか? –

+0

いいえ、 'decimal'型は個々の10進数字(したがって名前)を格納しますが、IEEE-754(" float'または "' single ")とは異なる内部表現です。つまり、正確な小数点を格納できますIEEE-754はおおよその値を格納しますが、http://stackoverflow.com/questions/1209181/what-represents-a-double-in-sql-server – Dai

関連する問題