Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server T-SQL:必须声明标量变量-while循环中出错_Sql Server_Tsql - Fatal编程技术网

Sql server T-SQL:必须声明标量变量-while循环中出错

Sql server T-SQL:必须声明标量变量-while循环中出错,sql-server,tsql,Sql Server,Tsql,很抱歉做了很多更改,这里是产生错误的完整代码,我认为它来自所有Where ID=@currID语句,但我不知道如何改进它。同时,我也非常感谢大家对改进代码的建议,因为我是初学者,非常感谢 DECLARE @currID bigint SET @currID = (SELECT MIN(ID) FROM dbo.test1); WHILE (@currID <= (SELECT MAX(ID) FROM dbo.test1)) BEGIN IF EXISTS (SELECT

很抱歉做了很多更改,这里是产生错误的完整代码,我认为它来自所有Where ID=@currID语句,但我不知道如何改进它。同时,我也非常感谢大家对改进代码的建议,因为我是初学者,非常感谢

DECLARE @currID bigint
SET @currID = (SELECT MIN(ID) FROM dbo.test1);
WHILE (@currID <= (SELECT MAX(ID) FROM dbo.test1))
BEGIN

        IF EXISTS (SELECT * FROM dbo.test2 
        WHERE A = (SELECT A FROM dbo.test1 WHERE ID = @currID) 
        AND B = (SELECT B FROM dbo.test1 WHERE ID = @currID))

                UPDATE dbo.test2
                SET Count = Count + (SELECT Count FROM dbo.test1 WHERE ID = @currID)
                WHERE A = (SELECT A FROM dbo.test1 WHERE ID = @currID) 
                AND B = (SELECT B FROM dbo.test1 WHERE ID = @currID);

                SET @currID = @currID + 1

        ELSE
                INSERT INTO dbo.test2 (A, B)
                SELECT *
                FROM dbo.test1 WHERE ID = @currID;

                SET @currID = @currID + 1

END

您需要包装子查询。批次

DECLARE @currID bigint
SET @currID = (SELECT MIN(ID) FROM dbo.Eventlogs_Aggregated_byTime1)
WHILE (@currID < (SELECT MAX(ID) FROM dbo.Eventlogs_Aggregated_byTime1) + 1)

问题解决:问题是simicolon,它象征着一个新的块,其中旧的局部变量不再可用,并且在每个if和else之后都需要开始和结束

非常感谢!我认为错误在其他地方…错误的括号。+1不应该是语句的一部分,请更正。这些类型的错误通常都是由于打字错误造成的。您只需要仔细检查代码,确保变量拼写正确,paren位于正确的位置?看起来你没有用。可能的输入错误:Eventlogs\u Aggregated\u byTime1和Eventlogs\u Aggregatet\u byTime1。我发现至少有三个地方的t-sql无效。您已经更改了问题中的代码3到4次,这使得任何人都无法提供有意义的答案。请您发布您试图运行的全部代码,以及您收到的确切错误消息,好吗?我要补充一点,名为count的列只是一个糟糕且令人困惑的名称选择。我希望您不希望实际计算行数,但不可能理解您试图实现的目标。