繁体   English   中英

将输入值分配给 SQL Server 存储过程中的列值

[英]Assigning an input value to a column's value in SQL Server stored procedure

我正在尝试编写一个将日期作为输入的存储过程。

如果传递的日期是18-07-2019 ,那么应该从数据库中获取从17-07-2019 06:00 am18-07-2019 06:00 am的数据。

在下面的存储过程中,我将Reportdatedatetime数据类型)作为输入。 但是我无法将它分配给我正在查询的数据库表中包含时间( TimestampUTC列)的列。

因此,按照以下逻辑,数据会自动显示从昨天到今天“(21-07-2019 到 22-07-2019)”,并且不会根据用户输入的日期而改变。

在此处显示部分存储过程:

CREATE PROCEDURE [dbo].[GetElectricityData]
    @Reportdate DATETIME
AS
BEGIN
    SET NOCOUNT ON;    

    WITH t AS
    (
        SELECT a.name, b.Data , a.UnitId, b.TimestampUTC
        FROM [10.87.233.57,1433].[EMMA].[dbo].MeterTags a 
        JOIN [10.87.233.57,1433].[EMMA].[dbo].[DataLog] b ON a.MeterTagId = b.MeterTagId
        WHERE b.MeterTagId IN (388, 184, 196, 194, 197)
        AND TimestampUTC BETWEEN DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE() - 1), 0) + '06:00'
                             AND DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0) + '06:00'
    GROUP BY 
        DATEADD(minute, DATEDIFF(minute, 0, TimestampUTC) / 15 * 15, 0),
        a.name, b.Data, a.UnitId, b.TimestampUTC
 )

任何建议都会非常有帮助。

GETDATE()将始终为您提供当前日期,这就是为什么数据从昨天到今天自动显示的原因,而不是尝试如下所示

DATEADD(DAY, DATEDIFF(DAY, 0, CONVERT(datetime, @ReportDate) - 1), 0) + '06:00'
AND
DATEADD(DAY, DATEDIFF(DAY, 0, CONVERT(datetime, @ReportDate)), 0) + '06:00'

我可以看到您在 WHERE 子句中引用了 GETDATE()(两次)。 将它们替换为您的 @Reportdate 变量,如下所示。

    CREATE PROCEDURE [dbo].[GetElectricityData]
        @Reportdate DATETIME
    AS
    BEGIN
        SET NOCOUNT ON;    

        WITH t AS
        (
            SELECT a.name, b.Data , a.UnitId, b.TimestampUTC
            FROM [10.87.233.57,1433].[EMMA].[dbo].MeterTags a 
            JOIN [10.87.233.57,1433].[EMMA].[dbo].[DataLog] b ON a.MeterTagId = b.MeterTagId
            WHERE b.MeterTagId IN (388, 184, 196, 194, 197)
            AND TimestampUTC BETWEEN DATEADD(DAY, DATEDIFF(DAY, 0, @Reportdate - 1), 0) + '06:00'
                                 AND DATEADD(DAY, DATEDIFF(DAY, 0, @Reportdate), 0) + '06:00'
        GROUP BY 
            DATEADD(minute, DATEDIFF(minute, 0, TimestampUTC) / 15 * 15, 0),
            a.name, b.Data, a.UnitId, b.TimestampUTC
     )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM