I have a SQL command:
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
After running this code, I met the error :
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".
Can you help me fix it?
You should use [@TABLE_NAME] instead.