SQL Server:必须声明标量变量

Posted

技术标签:

【中文标题】SQL Server:必须声明标量变量【英文标题】:SQL Server: must declare the scalar variable 【发布时间】:2015-02-25 19:18:33 【问题描述】:

我正在使用 SQL Server 2012。我尝试声明两个变量 @max@rc 并在插入语句中使用它们:

DECLARE @max INT 
SET @max = 100000

DECLARE @rc INT
SET @rc = 1

INSERT INTO dbo.Nums VALUES(1);

WHILE @rc * 2 <= @max
BEGIN
    INSERT INTO dbo.Nums 
       SELECT n + @rc 
       FROM dbo.Nums

    SET @rc = @rc * 2
END

INSERT INTO dbo.Nums 
   SELECT n + @rc 
   FROM dbo.Nums 
   WHERE n + @rc <= @max
GO

我收到此错误(四次):

[错误代码:137,SQL 状态:37000] [Microsoft][ODBC SQL Server 驱动程序][SQL Server] 必须声明标量变量“@rc”。

当我尝试以下操作时:

DECLARE @max INT
SET @max = 100000

DECLARE @rc INT
SET @rc = 1

INSERT INTO dbo.Nums VALUES(1);

WHILE @rc * 2 <= @max
BEGIN
    DECLARE @rc     INT
    DECLARE @max    INT

    SET @max = 100000

    INSERT INTO dbo.Nums 
       SELECT n + @rc 
       FROM dbo.Nums

    SET @rc = @rc * 2
END

INSERT INTO dbo.Nums 
   SELECT n + @rc 
   FROM dbo.Nums 
   WHERE n + @rc <= @max
GO

我只得到一次:

[错误代码:137,SQL 状态:37000] [Microsoft][ODBC SQL Server 驱动程序][SQL Server] 必须声明标量变量“@rc”。

你能帮我找出问题吗?

谢谢

【问题讨论】:

您是否选择了所有的 SQL 行来运行?它对我来说运行良好,我认为您在执行时没有选择声明变量的行。 感谢您的回复。我使用 DbVisualizer 运行命令。它不允许选择行我放了整个代码并简单地执行它。 必须是 DbVisualizer 怪癖/问题。在 SSMS 中运行良好; SQL 没有任何问题。 什么版本@TabAlleman。在 2008r2 中,它抱怨是因为变量是在循环内声明的。 删除分号解决了“问题”?您的客户端工具严重损坏。查看某处是否有允许您指定批处理分隔符的设置 - 似乎默认值为分号,但恕我直言,您应该将其设为 GO 以与本机工具保持一致。 last thing you should be doing is removing semi-colons. 【参考方案1】:

由于这看起来您正在尝试填充数字表,因此这是另一种方法。它不使用循环,而且相当简单。

DECLARE @max INT;
SET @max = 100000;

WITH
    E1(N) AS (select 1 from (values (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))dt(n)),
    E2(N) AS (SELECT 1 FROM E1 a, E1 b), --10E+2 or 100 rows
    E4(N) AS (SELECT 1 FROM E2 a, E2 b), --10E+4 or 10,000 rows max
    E5(N) as (select 1 from E4, E1),
    cteTally(N) AS 
    (
        SELECT  ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM E5
    )

INSERT INTO dbo.Nums 
select N from cteTally
where N <= @max;

【讨论】:

感谢您的帮助

以上是关于SQL Server:必须声明标量变量的主要内容,如果未能解决你的问题,请参考以下文章

sql数据库错误“必须声明标量变量”

sql必须声明标量变量错误

尝试在 SQL 中运行 UPDATE 语句时“必须声明标量变量”

vb.net SQL 导致 - “必须声明标量变量”

必须声明标量变量“@MyDivision_1”

必须用参数声明标量变量