在表中为每个数据库查找具有空值的列[关闭]

问题描述 投票:0回答:3

我有表格,如Databasename,tablename,columnname,query。但在查询列SELECT COUNT(MachineName) AS Cnt FROM Keys WHERE MachineName<>NULL。 如何使用表中的此查询列执行(我需要执行查询列的剩余3列)任何人都可以帮助我。

sql sql-server sql-server-2008-r2
3个回答
1
投票

哦,我误解了。您是否正在搜索在查询列中执行查询的查询,并使用数据库中的值替换其中的某些值,如下例所示:

if object_ID('tempdb..Test') is null
begin
    create table tempdb..Test (
    dbname nvarchar(512),
    tblname nvarchar(512),
    columnename nvarchar(512),
    query nvarchar(MAX)
    )


    --  delete from tempdb..Test
    insert into tempdb..Test (dbname, tblname, columnename, query)
    values ('master','sysobjects','id','select count([col]) from [db]..[tbl] where [col] is not null') 

    insert into tempdb..Test (dbname, tblname, columnename, query)
    values ('master','syscolumns','id','select count([col]) from [db]..[tbl] where [col] is not null') 
end


declare @db nvarchar(512)
declare @tbl nvarchar(512)
declare @col nvarchar(512)
declare @qry nvarchar(512)
declare @cmd nvarchar(512)

declare cur_test cursor 
    for select dbname, tblname, columnename, query
    from tempdb..Test
open cur_test

FETCH NEXT FROM cur_test   
INTO @db, @tbl, @col, @qry

WHILE @@FETCH_STATUS = 0  
BEGIN  
    set @cmd = replace(replace(replace(@qry,'[db]', quotename(@db)), '[tbl]', quotename(@tbl)),'[col]', @col)
    exec sp_executesql @cmd


    FETCH NEXT FROM cur_test   
    INTO @db, @tbl, @col, @qry
END

close cur_test
deallocate cur_test  

0
投票

使用“is”或“is not”运算符与null进行比较。

SELECT COUNT(MachineName) AS Cnt FROM Keys WHERE MachineName is not NULL

或者如果您想要列MachineName具有值的条目,请使用

SELECT COUNT(MachineName) AS Cnt FROM Keys WHERE MachineName is NULL

0
投票

你搜索这样的东西:

select 'select count(*) from ' + QUOTENAME(so.name) + ' where ' + (SELECT QUOTENAME(Name) + ' is null and ' 
           FROM syscolumns sc
           where sc.id= so.id
            FOR XML PATH('') ) + '1=1' 
from sysobjects so 
where so.xtype='U'
order by so.id
© www.soinside.com 2019 - 2024. All rights reserved.