计数具有数据的每一行的列数

我有表8列,而5000+行。

我需要帮助的写作T-SQL选择将计为每行不为空列数。

--------------解决方案-------------

试试这个,你的表的名称更换两次出现“目录”中。 这已经在默认Report Server数据库成功测试的SQL Server 2008 R2开发版。

DECLARE @Sql nvarchar(max)
SET @Sql = 'SELECT 0'

SELECT
@Sql = @Sql + '
+ CASE WHEN [' + [sys].[columns].[name] + '] IS NULL THEN 1 ELSE 0 END'
FROM [sys].[columns]
WHERE [sys].[columns].[object_id] = OBJECT_ID('Catalog')
AND [sys].[columns].is_nullable = 1

SET @Sql = @Sql + '
AS [NullValuesCount] FROM [Catalog]'

PRINT @Sql

EXEC sp_executesql @Sql

注意,这种方法是容易受到SQL注入攻击,如果你不能信任的列名的来源(例如,如果最终用户可以导致与名称在其控制下创建的列)。

纯的Transact SQL(不使用动态SQL调用它不是TSQL的一部分):

SELECT
CASE WHEN c1 IS NULL THEN 0 ELSE 1 END
+ CASE WHEN c2 IS NULL THEN 0 ELSE 1 END
+ CASE WHEN c3 IS NULL THEN 0 ELSE 1 END
+ CASE WHEN c4 IS NULL THEN 0 ELSE 1 END
+ CASE WHEN c5 IS NULL THEN 0 ELSE 1 END
+ CASE WHEN c6 IS NULL THEN 0 ELSE 1 END
+ CASE WHEN c7 IS NULL THEN 0 ELSE 1 END
+ CASE WHEN c8 IS NULL THEN 0 ELSE 1 END
FROM T

分类:TSQL 时间:2015-03-15 人气:0
本文关键词: SQL Server 2008中,TSQL
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.170 (s). 10 q(s)