SQLServerにおけるbigint回転int符号付き時報エラーの解決方法
877 ワード
1つの要件は、1つのクラウドモニタリングのステータス値に複数のステータス(同時に存在する可能性のある様々な異常、警告ステータスを含む)を格納するために、ビット演算メカニズムを使用してint型に格納することである.
現在、モニタリング・ログ・データ量が非常に大きい(億レベル)場合、オンライン・レポートで使用するために、データを1時間ごと、毎日集約する必要があります.ステータスは、通常(0)、警告(1)、異常の3つのレベルに分けられます.(2)集約時にmaxを用いて最悪の状態を選択する必要があり,状態値の処理にレベルと状態ビット数を加える必要があり,bigint型を用いて演算を行う.
問題は、bigintをintに変更したときに元のステータス値を取得したときにSQLServerがエラーを報告したことです.
メッセージ8115、レベル16、ステータス2、1行目にexpressionをデータ型intに変換すると算術オーバーフローエラーが発生します.
ステータスコードに0 x 8000000が使用されているため、シンボルビットの問題が発生した.変換関数を書いて解決しました.
現在、モニタリング・ログ・データ量が非常に大きい(億レベル)場合、オンライン・レポートで使用するために、データを1時間ごと、毎日集約する必要があります.ステータスは、通常(0)、警告(1)、異常の3つのレベルに分けられます.(2)集約時にmaxを用いて最悪の状態を選択する必要があり,状態値の処理にレベルと状態ビット数を加える必要があり,bigint型を用いて演算を行う.
問題は、bigintをintに変更したときに元のステータス値を取得したときにSQLServerがエラーを報告したことです.
メッセージ8115、レベル16、ステータス2、1行目にexpressionをデータ型intに変換すると算術オーバーフローエラーが発生します.
ステータスコードに0 x 8000000が使用されているため、シンボルビットの問題が発生した.変換関数を書いて解決しました.
CREATE FUNCTION [dbo].[BigintToInt]
(
@Value bigint
)
RETURNS int
AS
BEGIN
-- int
IF @Value & 0x80000000 <> 0 RETURN @Value & 0xFFFFFFFF | 0xFFFFFFFF00000000
--
RETURN @Value & 0xFFFFFFFF
END