IF OBJECT_ID(N'dbo.XD_电能表谐波数据', N'U') IS NULL
BEGIN
    CREATE TABLE dbo.XD_电能表谐波数据
    (
        ID int IDENTITY(1,1) NOT NULL,
        工位号 nvarchar(50) NULL,
        A相电压总谐波畸变 float NULL,
        B相电压总谐波畸变 float NULL,
        C相电压总谐波畸变 float NULL,
        系统电压总谐波畸变 float NULL,
        A相电流总谐波畸变 float NULL,
        B相电流总谐波畸变 float NULL,
        C相电流总谐波畸变 float NULL,
        系统电流总谐波畸变 float NULL,
        A相电压奇次谐波畸变 float NULL,
        B相电压奇次谐波畸变 float NULL,
        C相电压奇次谐波畸变 float NULL,
        A相电流奇次谐波畸变 float NULL,
        B相电流奇次谐波畸变 float NULL,
        C相电流奇次谐波畸变 float NULL,
        A相电压偶次谐波畸变 float NULL,
        B相电压偶次谐波畸变 float NULL,
        C相电压偶次谐波畸变 float NULL,
        A相电流偶次谐波畸变 float NULL,
        B相电流偶次谐波畸变 float NULL,
        C相电流偶次谐波畸变 float NULL,
        操作时间 datetime NULL CONSTRAINT DF_XD_电能表谐波数据_操作时间 DEFAULT (GETDATE()),
        CONSTRAINT PK_XD_电能表谐波数据 PRIMARY KEY CLUSTERED (ID ASC)
    );
END
GO

IF NOT EXISTS (
    SELECT 1
    FROM sys.indexes
    WHERE name = N'IX_XD_电能表谐波数据_工位号_操作时间'
      AND object_id = OBJECT_ID(N'dbo.XD_电能表谐波数据')
)
BEGIN
    CREATE NONCLUSTERED INDEX IX_XD_电能表谐波数据_工位号_操作时间
    ON dbo.XD_电能表谐波数据 (工位号 ASC, 操作时间 DESC);
END
GO

IF OBJECT_ID(N'dbo.XD_电能表谐波数据_增加', N'P') IS NOT NULL
    DROP PROCEDURE dbo.XD_电能表谐波数据_增加;
GO

CREATE PROCEDURE dbo.XD_电能表谐波数据_增加
    @工位号 nvarchar(50) = N'',
    @A相电压总谐波畸变 float = NULL,
    @B相电压总谐波畸变 float = NULL,
    @C相电压总谐波畸变 float = NULL,
    @系统电压总谐波畸变 float = NULL,
    @A相电流总谐波畸变 float = NULL,
    @B相电流总谐波畸变 float = NULL,
    @C相电流总谐波畸变 float = NULL,
    @系统电流总谐波畸变 float = NULL,
    @A相电压奇次谐波畸变 float = NULL,
    @B相电压奇次谐波畸变 float = NULL,
    @C相电压奇次谐波畸变 float = NULL,
    @A相电流奇次谐波畸变 float = NULL,
    @B相电流奇次谐波畸变 float = NULL,
    @C相电流奇次谐波畸变 float = NULL,
    @A相电压偶次谐波畸变 float = NULL,
    @B相电压偶次谐波畸变 float = NULL,
    @C相电压偶次谐波畸变 float = NULL,
    @A相电流偶次谐波畸变 float = NULL,
    @B相电流偶次谐波畸变 float = NULL,
    @C相电流偶次谐波畸变 float = NULL
AS
BEGIN
    SET NOCOUNT ON;

    IF NULLIF(LTRIM(RTRIM(@工位号)), N'') IS NULL
        RETURN;

    -- 电表返回 -1 表示无效数据；任一谐波点无效时，本次整条采集不入库。
    IF @A相电压总谐波畸变 = -1
       OR @B相电压总谐波畸变 = -1
       OR @C相电压总谐波畸变 = -1
       OR @系统电压总谐波畸变 = -1
       OR @A相电流总谐波畸变 = -1
       OR @B相电流总谐波畸变 = -1
       OR @C相电流总谐波畸变 = -1
       OR @系统电流总谐波畸变 = -1
       OR @A相电压奇次谐波畸变 = -1
       OR @B相电压奇次谐波畸变 = -1
       OR @C相电压奇次谐波畸变 = -1
       OR @A相电流奇次谐波畸变 = -1
       OR @B相电流奇次谐波畸变 = -1
       OR @C相电流奇次谐波畸变 = -1
       OR @A相电压偶次谐波畸变 = -1
       OR @B相电压偶次谐波畸变 = -1
       OR @C相电压偶次谐波畸变 = -1
       OR @A相电流偶次谐波畸变 = -1
       OR @B相电流偶次谐波畸变 = -1
       OR @C相电流偶次谐波畸变 = -1
        RETURN;

    -- 谐波畸变允许为 0；只有全部点位都为空时跳过保存。
    IF @A相电压总谐波畸变 IS NULL
       AND @B相电压总谐波畸变 IS NULL
       AND @C相电压总谐波畸变 IS NULL
       AND @系统电压总谐波畸变 IS NULL
       AND @A相电流总谐波畸变 IS NULL
       AND @B相电流总谐波畸变 IS NULL
       AND @C相电流总谐波畸变 IS NULL
       AND @系统电流总谐波畸变 IS NULL
       AND @A相电压奇次谐波畸变 IS NULL
       AND @B相电压奇次谐波畸变 IS NULL
       AND @C相电压奇次谐波畸变 IS NULL
       AND @A相电流奇次谐波畸变 IS NULL
       AND @B相电流奇次谐波畸变 IS NULL
       AND @C相电流奇次谐波畸变 IS NULL
       AND @A相电压偶次谐波畸变 IS NULL
       AND @B相电压偶次谐波畸变 IS NULL
       AND @C相电压偶次谐波畸变 IS NULL
       AND @A相电流偶次谐波畸变 IS NULL
       AND @B相电流偶次谐波畸变 IS NULL
       AND @C相电流偶次谐波畸变 IS NULL
        RETURN;

    INSERT INTO dbo.XD_电能表谐波数据
    (
        工位号,
        A相电压总谐波畸变,
        B相电压总谐波畸变,
        C相电压总谐波畸变,
        系统电压总谐波畸变,
        A相电流总谐波畸变,
        B相电流总谐波畸变,
        C相电流总谐波畸变,
        系统电流总谐波畸变,
        A相电压奇次谐波畸变,
        B相电压奇次谐波畸变,
        C相电压奇次谐波畸变,
        A相电流奇次谐波畸变,
        B相电流奇次谐波畸变,
        C相电流奇次谐波畸变,
        A相电压偶次谐波畸变,
        B相电压偶次谐波畸变,
        C相电压偶次谐波畸变,
        A相电流偶次谐波畸变,
        B相电流偶次谐波畸变,
        C相电流偶次谐波畸变
    )
    VALUES
    (
        @工位号,
        @A相电压总谐波畸变 / 1000.0,
        @B相电压总谐波畸变 / 1000.0,
        @C相电压总谐波畸变 / 1000.0,
        @系统电压总谐波畸变 / 1000.0,
        @A相电流总谐波畸变 / 1000.0,
        @B相电流总谐波畸变 / 1000.0,
        @C相电流总谐波畸变 / 1000.0,
        @系统电流总谐波畸变 / 1000.0,
        @A相电压奇次谐波畸变 / 1000.0,
        @B相电压奇次谐波畸变 / 1000.0,
        @C相电压奇次谐波畸变 / 1000.0,
        @A相电流奇次谐波畸变 / 1000.0,
        @B相电流奇次谐波畸变 / 1000.0,
        @C相电流奇次谐波畸变 / 1000.0,
        @A相电压偶次谐波畸变 / 1000.0,
        @B相电压偶次谐波畸变 / 1000.0,
        @C相电压偶次谐波畸变 / 1000.0,
        @A相电流偶次谐波畸变 / 1000.0,
        @B相电流偶次谐波畸变 / 1000.0,
        @C相电流偶次谐波畸变 / 1000.0
    );
END
GO
