[英]SQL Server: must declare the scalar variable
我正在研究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.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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.