TSQL - 动态WHERE子句,用于检查某些列的NULL

时间:2014-04-15 12:38:41

标签: sql tsql null sql-server-2012

使用Sql Server 2012我想查询一个表,只获取某些列不为空或不包含空字符串的行。

我需要检查的列是否为空,“所有列都以 col_as col_m 开头,后跟两位数字。

目前我写where col_as01 is not null or .... 由于我必须检查的列数量,这很难维护。

有更优雅的方法吗?某种循环?

我还在select stmt中使用ISNULL(NULLIF([col_as01],''),Null)AS [col_as01]来删除空字符串值。

谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

你应该填空。

select 
    @myWhereString =stuff((select 'or isnull('+COLUMN_NAME+','''') = '''' ' as [text()] 
                       from Primebet.INFORMATION_SCHEMA.COLUMNS 
                       where TABLE_NAME = 'YourTable'
                           and (column_name like 'col_as%'
                                or
                                column_name like 'col_m%')
                       for xml path('')),1,3,'')
set @myWhereString ='rest of your query'+ @myWhereString

exec executesql with your query

答案 1 :(得分:0)

你可以使用这样的东西

WHERE DATALENGTH(col_as01) > 0

这将隐式排除空值,长度大于0将保证您检索非空字符串。

PS:您也可以使用LEN而不是DATALENGTH,但这会在开头和结尾修剪字符串中的空格,这样您就不会获得仅包含空格的值。

答案 2 :(得分:0)

这很简单:

WHERE  col_as01 > ''