2014-10-09 65 views
0

我试图检查空值或空列。SQL - 空或空字段

SELECT * FROM myTable 
WHERE myColumn IS NULL OR myColumn = ' '; 

的事情是,我想包括几桌(MYTABLE1,myTable2,myTable3)在同一查询 和避免需要指定列名(myColumn) 所以查询是通用尽可能恢复几个表中的空列名或空列名。

在此先感谢。

+0

您需要包括名字,如果你想简化的表达,你可以使用 SELECT * FROM mytable的 WHERE合并(myColumn, '')= '' – radar 2014-10-09 02:11:10

回答

0
DECLARE @col VARCHAR(255), 
     @table VARCHAR(255), 
     @cmd VARCHAR(max) 
DECLARE getinfo CURSOR FOR 
    SELECT t.name, 
     c.name 
    FROM sys.tables t 
     JOIN sys.columns c 
      ON t.Object_ID = c.Object_ID 
    WHERE t.Name IN ('table-1', 'table-2') 

--WHERE t.Name IN (provide your TABLE list) 
OPEN getinfo 

FETCH NEXT FROM getinfo INTO @table, @col 

WHILE @@FETCH_STATUS = 0 
    BEGIN 
     SELECT @cmd = 'IF EXISTS (SELECT top 1 * FROM ' + @table 
        + ' WHERE (' + @col + ' IS NULL or ' + @col 
        + '='''')) BEGIN print ''tablename=''+''' 
        + @table + '''+'' column name=''+''' + @col 
        + ''' end' 

     --PRINT @cmd 

     EXEC(@cmd) 
     FETCH NEXT FROM getinfo INTO @table, @col 
    END 

CLOSE getinfo 

DEALLOCATE getinfo 
+0

感谢您的Parthiban。我试图在WHERE t.Name IN(table1,table2,table3)下放置一个表名列表,并且有一个错误说'无效的列名'table1'。一旦尝试使用单个表格删除其中t.name ='table1'它工作正常......围绕此任何方式? – entrup 2014-10-10 01:03:20

+0

您能否告诉我您在IN子句中使用了哪种格式。我的意思是你给的价值应该在单引号内。 – StackUser 2014-10-10 06:00:40

+0

2008 R2 SQL管理套件 – entrup 2014-10-16 02:05:49