Azure流分析中的变量

cmssoen2  于 2023-05-29  发布在  其他
关注(0)|答案(1)|浏览(131)

我试图在我的数据库中创建一个自递增值,它在时间间隔大于一秒后增加值。流分析当前正在将数据从事件中心发送到SQL数据库中的不同表,因此我只需要能够存储单个值,因此如果没有间隙,则存储变量,但如果有间隙,则存储变量+1。
从我所看到的,这里有另一个问题,询问变量,但它没有回应,在这一点上,它正在成为一个真实的的障碍。
我尝试了在SQL中声明变量的正常方法:

DECLARE @New_Test_Number AS INT

IF DatabaseInputTestNumber IS NULL
    SET @New_Test_Number = 1;
ELSE
    IF DATEDIFF(SECOND,LAG(Time),Time) > 1
        SET @New_Test_Number = DatabaseInputTestNumber + 1;
    ELSE
        SET @New_Test_Number = DatabaseInputTestNumber;

其中 DatabaseInputTestNumber 是从数据库中读取的,New_Test_Number 是我的变量。
为了澄清,数据来自事件中心,以进行流分析,然后到SQL数据库。存储当前测试编号的同一数据库。

voase2hg

voase2hg1#

我尝试使用以下示例数据在我的环境中复制该问题

使用下面的代码:

DECLARE @New_Test_Number INT;
IF DatabaseInputTestNumber IS  NULL
   SET @New_Test_Number =  1;
ELSE

   IF  DATEDIFF(second, (SELECT  LAG(Time) OVER (ORDER BY  time) FROM  data), GETDATE()) >  1
        SET @New_Test_Number = DatabaseInputTestNumber +  1; 
   ELSE
    SET @New_Test_Number = DatabaseInputTestNumber;

我得到了下面的错误:

我试着用下面的代码来解决这个问题:

DECLARE @DatabaseInputTestNumber INT;
DECLARE @New_Test_Number INT;
SELECT @DatabaseInputTestNumber = DatabaseInputTestNumber FROM  data;

IF @DatabaseInputTestNumber IS  NULL
   SET @New_Test_Number =  1;
ELSE
   IF  DATEDIFF(second, (SELECT  LAG(Time) OVER (ORDER BY  time) FROM  data), GETDATE()) >  1
     SET @New_Test_Number = @DatabaseInputTestNumber +  1;
   ELSE
     SET @New_Test_Number = @DatabaseInputTestNumber;
UPDATE  data
SET DatabaseInputTestNumber = @New_Test_Number;
SELECT  *  from  data

数据更新成功:

相关问题