Sql server SQL Server:必须声明标量变量
我正在开发SQL Server 2012。我尝试声明两个变量@max和@rc,并在insert语句中使用它们:Sql server SQL Server:必须声明标量变量,sql-server,Sql Server,我正在开发SQL Server 2012。我尝试声明两个变量@max和@rc,并在insert语句中使用它们: 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
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
你能帮我解决这个问题吗
谢谢因为这看起来像是您在尝试填充数字表,这里是另一种方法。它不使用循环,而且相当简单
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行?它对我来说运行得很好,我认为您在执行时没有选择声明变量的行。谢谢您的回复。我使用DbVisualizer来运行该命令。它不允许选择行,我将整个代码放在这里并简单地执行它。这一定是DbVisualizer的一个怪癖/问题。在SSMS中工作良好;SQL没有问题。什么版本的@TabAlleman。在2008r2中,它会抱怨,因为变量是在循环中声明的。删除分号修复了这个问题?您的客户端工具严重损坏。查看是否有允许您指定批处理分隔符的设置-似乎默认为分号,但我认为您应该使其与本机工具保持一致。谢谢,这很有帮助