1

列のデータがnullの場合に、SQLで集計を実行しないように、TSQLアーセナルにコードを追加しようとしています。理想的には、SQLサーバーにSUM_NN(sum no nullの場合)があり、値のいずれかがnullの場合に発生します。

あなたはUDFからレイザーを上げることができないので、私がそれをすることを考えることができる唯一の方法はこのように見えました、しかし私はこの解決策が好きではありません:

CREATE FUNCTION dbo.NULL_TEST_F(@arg FLOAT)
RETURNS FLOAT
AS
BEGIN
    IF(@arg IS NULL)
        SELECT 1/0
    RETURN @arg
END

注:これはばかげた解決策だと思いますが、データが不足していると何度もやけどを負ってしまいます。また、SQL Server 2005を使用していますが、2008年と2012年のソリューションを利用できます。さらに、他のデータベースがこのタイプの問題をどのように処理しているかを知りたいです。

4

2 に答える 2

3

これが私の最終的な解決策でした:

CREATE FUNCTION [dbo].[NullTest_F]
(
    @input FLOAT,
    @message VARCHAR(100)
)
RETURNS FLOAT
AS
BEGIN
    DECLARE @test INT
    IF(@input IS NULL)
        SELECT @test = CAST(@message AS INT)
    RETURN @input
END

次に、集計関数を実行するときに、これに役立つエラー メッセージを埋め込むことができます。例:

CREATE TABLE Data (
    Date DATETIME,
    DataPoint FLOAT
)

INSERT INTO Data (Date, DataPoint) VALUES ('2012-03-01', 4)
INSERT INTO Data (Date, DataPoint) VALUES ('2012-03-02', 6)

SELECT SUM(NullTest_F(DataPoint, 'Missing data at' + CONVERT(VARCHAR(10), Data))
FROM Data
于 2012-08-09T16:06:22.930 に答える
2

多分これが役立つでしょう: https://stackoverflow.com/a/4681815/1371070

上記のリンクされた回答で提案されているような関数を作成し、それを集計から呼び出すことができ@argますnull

全体的には同じ戦略ですが、ゼロ除算よりもスローする方が良いエラーだと思います。

于 2012-08-02T22:03:22.763 に答える