SQL 服务器中的游标错误
Cursor inside cursor error in SQL Server
我有一个 SQL 命令:
CREATE TABLE #TEMP_TABLE
( BUSINESS_DATE DATE
, COLUMN_NAME VARCHAR(100)
, ROW_COUNT INT
, TEST_TIME DATETIME)
DECLARE @COLUMN VARCHAR(MAX)
DECLARE @TABLE_NAME TABLE
(
TABLE_NAME VARCHAR(MAX)
)
INSERT INTO @TABLE_NAME
SELECT * FROM DATA.DBO.[SOURCE_TABLE]
DECLARE @DATE VARCHAR(8) = '20160429'
DECLARE CURSOR_TB CURSOR FOR
SELECT TABLE_NAME FROM @TABLE_NAME
OPEN CURSOR_TB
FETCH NEXT FROM CURSOR_TB INTO @TABLE_NAME
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE CURSOR_CL CURSOR FOR
SELECT DISTINCT COLUMN_NAME
FROM DATA.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME IN (SELECT TABLE_NAME FROM @TABLE_NAME )
ORDER BY COLUMN_NAME
OPEN CURSOR_CL
FETCH NEXT FROM CURSOR_CL INTO @COLUMN
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC('
INSERT INTO #TEMP_TABLE
SELECT BUSINESS_DATE
, '''+@COLUMN+'''
, COUNT('+@COLUMN+') AS ['+@COLUMN+']
, SYSDATETIME ()
FROM DATA.DBO.'+@TABLE_NAME+'
WHERE BUSINESS_DATE = '''+@DATE+'''
AND '+@COLUMN+' IS NOT NULL
GROUP BY BUSINESS_DATE
')
FETCH NEXT FROM CURSOR_CL INTO @COLUMN
END
CLOSE CURSOR_CL
DEALLOCATE CURSOR_CL
FETCH NEXT FROM CURSOR_TB INTO @TABLE_NAME
END
CLOSE CURSOR_TB
DEALLOCATE CURSOR_TB
SELECT * FROM #TEMP_TABLE
在 运行 这段代码之后,我遇到了错误:
Msg 137, Level 16, State 1, Line 19 Must declare the scalar variable
"@TABLE_NAME". Msg 137, Level 16, State 1, Line 38 Must declare the
scalar variable "@TABLE_NAME". Msg 137, Level 16, State 1, Line 47
Must declare the scalar variable "@TABLE_NAME".
你能帮我解决一下吗?
您应该改用 [@TABLE_NAME]。
我有一个 SQL 命令:
CREATE TABLE #TEMP_TABLE
( BUSINESS_DATE DATE
, COLUMN_NAME VARCHAR(100)
, ROW_COUNT INT
, TEST_TIME DATETIME)
DECLARE @COLUMN VARCHAR(MAX)
DECLARE @TABLE_NAME TABLE
(
TABLE_NAME VARCHAR(MAX)
)
INSERT INTO @TABLE_NAME
SELECT * FROM DATA.DBO.[SOURCE_TABLE]
DECLARE @DATE VARCHAR(8) = '20160429'
DECLARE CURSOR_TB CURSOR FOR
SELECT TABLE_NAME FROM @TABLE_NAME
OPEN CURSOR_TB
FETCH NEXT FROM CURSOR_TB INTO @TABLE_NAME
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE CURSOR_CL CURSOR FOR
SELECT DISTINCT COLUMN_NAME
FROM DATA.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME IN (SELECT TABLE_NAME FROM @TABLE_NAME )
ORDER BY COLUMN_NAME
OPEN CURSOR_CL
FETCH NEXT FROM CURSOR_CL INTO @COLUMN
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC('
INSERT INTO #TEMP_TABLE
SELECT BUSINESS_DATE
, '''+@COLUMN+'''
, COUNT('+@COLUMN+') AS ['+@COLUMN+']
, SYSDATETIME ()
FROM DATA.DBO.'+@TABLE_NAME+'
WHERE BUSINESS_DATE = '''+@DATE+'''
AND '+@COLUMN+' IS NOT NULL
GROUP BY BUSINESS_DATE
')
FETCH NEXT FROM CURSOR_CL INTO @COLUMN
END
CLOSE CURSOR_CL
DEALLOCATE CURSOR_CL
FETCH NEXT FROM CURSOR_TB INTO @TABLE_NAME
END
CLOSE CURSOR_TB
DEALLOCATE CURSOR_TB
SELECT * FROM #TEMP_TABLE
在 运行 这段代码之后,我遇到了错误:
Msg 137, Level 16, State 1, Line 19 Must declare the scalar variable "@TABLE_NAME". Msg 137, Level 16, State 1, Line 38 Must declare the scalar variable "@TABLE_NAME". Msg 137, Level 16, State 1, Line 47 Must declare the scalar variable "@TABLE_NAME".
你能帮我解决一下吗?
您应该改用 [@TABLE_NAME]。