Sql server 记录按字段名计数。动态结构化查询语言
任务是,为值为“”的表中的每列计算记录数 例如,表MARA有“LVORM”列,因此我的查询如下所示:Sql server 记录按字段名计数。动态结构化查询语言,sql-server,Sql Server,任务是,为值为“”的表中的每列计算记录数 例如,表MARA有“LVORM”列,因此我的查询如下所示: select count(*) from MARA where LVORM = '' 我所做的是创建游标脚本: declare @TABLE_NAME varchar(50), @COLUMN_NAME varchar(50), @NOBLANKS INT, @q nvarchar(max); DECLARE cur_headers CURSOR STATIC FOR SELECT to
select count(*) from MARA where LVORM = ''
我所做的是创建游标脚本:
declare @TABLE_NAME varchar(50), @COLUMN_NAME varchar(50), @NOBLANKS INT, @q nvarchar(max);
DECLARE cur_headers CURSOR
STATIC FOR SELECT top 50 TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'MARA' and COLUMN_NAME = 'LVORM'
OPEN cur_headers
IF @@CURSOR_ROWS > 0
BEGIN
FETCH NEXT FROM cur_headers INTO @TABLE_NAME, @COLUMN_NAME
WHILE @@Fetch_status = 0
BEGIN
set @NOBLANKS = 0;
select @q = 'select @NOBLANKS = count(*) from MARA where ' + @COLUMN_NAME + ' = '''' ';
exec(@q)
select @NOBLANKS;
select @q;
FETCH NEXT FROM cur_headers INTO @TABLE_NAME, @COLUMN_NAME
END
END
CLOSE cur_headers
DEALLOCATE cur_headers
SET NOCOUNT OFF
由于某些原因,我无法在变量@NOBLANKS
@q
返回正确的查询
知道为什么吗 您需要传递变量:
select @q = 'select @NOBLANKS = count(*) from MARA where ' + @COLUMN_NAME + ' = '''' ';
exec(@q)
=>
分号是可选的,但最好以分号结尾。毕竟,我们为人类编写代码
EXEC sp_executesql
N'select @NOBLANKS = count(*) from MARA where ' + @COLUMN_NAME + ' = '''' ',
N'@NOBLANKS INT OUT',
@NOBLANKS OUT;
DECLARE cur_headers CURSOR STATIC FOR
SELECT top 50 TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'MARA';
--AND COLUMN_NAME = 'LVORM';
-- here the COLUMN_NAME is defaulted to `LVORM` so it should be removed