我有一个包含20列的表格。第一个是我的主键。其余列是关于主键的属性。我需要逐行评估每一列。如果属性列的值不是null,则进行进一步处理。
我熟悉在TSQL中执行此操作的方式有一段时间来突破行,从列中捕获值,评估值以便进一步处理。
有没有人有更好的想法?
答案 0 :(得分:0)
我认为最好的方法是首先定义任何列是否实际具有空值。为此,您可以使用以下内容;
Select DATALENGTH(null,'Attr1','Attr2') // Add all the colums. This will return null. All of the columns must be the same type.
这将返回null。让我们说你有一个while循环(你也可以使用Cursor但是它们被认为比while循环慢),它们会根据这个语句的结果检查每一行,当你发现结果为null时你实际上可以检查哪个列为空。这应该会加快这个过程。
此外,这个看起来非常容易找到具有空值的行:https://dba.stackexchange.com/questions/14864/test-if-any-fields-are-null
答案 1 :(得分:0)
您可以取消对表的删除并过滤掉非NULL的内容:
select pk, col, val
from (select pk, col, val
from table t
unpivot (val for col in (attr1, attr2, . . . )) as unpivot
) u
where val is not null;
这将提供列的列表和关联的非NULL值。注意:它假定属性列的类型都是相同的。
答案 2 :(得分:0)
select PK from table where col1 is not null or col2 is not null or col3 is not null
等