My purpose is to produce a table containing the table_name, column_name, number of row each column and number of null value in each column. But I get an error:
Conversion failed when converting the varchar value ', ' to data type int
These are my queries:
DECLARE @BANG TABLE
(
TABLE_NAME NVARCHAR(MAX),
COLUMN_NAME NVARCHAR(MAX),
ID INT IDENTITY(1, 1)
)
INSERT INTO @BANG (TABLE_NAME, COLUMN_NAME)
SELECT A.NAME AS TABLE_NAME, B.NAME AS COLUMN_NAME
FROM SYS.TABLES AS A
LEFT JOIN SYS.COLUMNS AS B ON A.OBJECT_ID = B.OBJECT_ID
WHERE 1=1
AND A.NAME IN ('CTHD', 'HOADON', 'SANPHAM', 'KHACHHANG', 'NHANVIEN')
DECLARE @RESULT TABLE
(
TABLE_NAME NVARCHAR(MAX),
COLUMN_NAME NVARCHAR(MAX),
TOTAL_ROW INT,
TOTAL_NULL INT
)
DECLARE @ID INT = 0
WHILE @ID <= (SELECT COUNT(*) FROM @BANG)
BEGIN
DECLARE @TABLE_NAME NVARCHAR(MAX)
SET @TABLE_NAME = (SELECT TABLE_NAME FROM @BANG WHERE @ID = ID)
DECLARE @COLUMN_NAME NVARCHAR(MAX)
SET @COLUMN_NAME = (SELECT COLUMN_NAME FROM @BANG WHERE ID = @ID)
DECLARE @TOTAL_ROW INT
DECLARE @TOTAL_NULL INT
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = 'SET @TOTAL_ROW = (SELECT COUNT(*) FROM '+@TABLE_NAME+')
SET @TOTAL_NULL = (SELECT COUNT(*) FROM '+@TABLE_NAME+' WHERE '+@COLUMN_NAME+' IS NULL)
INSERT INTO @RESULT
VALUES ('+@TABLE_NAME+', '+@COLUMN_NAME+', '+@TOTAL_ROW+', '+@TOTAL_NULL+')
'
SET @ID += 1
EXEC (@SQL)
END
I need your help. Thanks in advance