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:必须声明标量变量的主要内容,如果未能解决你的问题,请参考以下文章