【问题标题】:Finding columns with null values in table for each database [closed]在每个数据库的表中查找具有空值的列[关闭]
【发布时间】:2018-02-28 12:38:17
【问题描述】:

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

【问题讨论】:

  • 不完全清楚你在问什么......你能展示你尝试过的吗?
  • 我有列名称为 'Databasename ,tablename,columnname,query' 的表。但我想执行存储在表列 ('Query') 中的查询。我可以使用 sp_executesql 语句仅使用 Query 列执行。但我需要所有带有额外动态查询的列与另一列一起执行
  • 在表中存储查询是一个很大的危险信号,表明在设计阶段出现了严重错误。
  • 我正在做一些像数据库清理这样的事情,我需要查询来返回表的所有空值数据列,这将在我的服务器中的所有数据库中运行

标签: sql sql-server sql-server-2008-r2


【解决方案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  

【讨论】:

    【解决方案2】:

    使用“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
    

    【讨论】:

    • “SELECT COUNT(MachineName) AS Cnt FROM Keys WHERE MachineName is NULL”中的此语句在列数据中。我想在表格中执行此操作以添加另一列是否可能?
    【解决方案3】:

    你搜索这样的东西:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-06
      • 1970-01-01
      • 1970-01-01
      • 2019-02-26
      • 2023-01-13
      • 2013-01-20
      相关资源
      最近更新 更多