Sql 空白值之和

Sql 空白值之和,sql,sql-server,Sql,Sql Server,如何在SQL Server中求空值之和 我尝试使用following,但返回null Declare @val varchar Declare @columns varchar(20) declare @sql varchar(200) set @columns= 'branch' set @sql = 'select ' + @val +'= sum(case when @columns = '''' then 1 else 0 end) from dbo.compan

如何在SQL Server中求空值之和

我尝试使用following,但返回null

Declare @val varchar
Declare @columns varchar(20) 
declare @sql varchar(200)
set @columns= 'branch'

set @sql  = 'select ' + @val +'= sum(case when @columns = '''' then 1 else 0 end)
         from dbo.companies'
exec(@sql)
select @val

我需要一个动态SQL语句,因为每个列的值都将从存储过程中返回。

完全不可能,但我认为您需要的是:

DECLARE @Count int, @Column sysname;
DECLARE @SQL nvarchar(MAX);

SET @Column = N'SomeColumnName';

SET @SQL = N'SELECT @Count = COUNT(CASE ' + QUOTENAME(@Column) + N' WHEN '''' THEN 1 END) FROM dbo.companies;';
EXEC sp_excutesql @SQL, N'@Count int OUTPUT',@Count = @Count OUTPUT;
SELECT @Count;

编辑:注意
'
NULL
不是相同的值;您似乎不知道将数据类型
varchar(1)
的变量(
@Val
)与值
NULL
连接到文字字符串的位置
NULL+{expr}=NULL
。如果要使用
NULL
对行进行计数,则
不是空字符串
是NULL
(当
时,您需要移动

我建议使用print语句来获取执行前形成的实际语句。当然,它返回NULL。您定义了@val,但没有给它赋值。然后将字符串连接在一起,因为其中一个为null,所以结果为null。@columns呢?为什么要首先使用动态sql?如果您真的需要动态sql(您的解释不清楚),您应该使用sp_executesql和参数。我读得越多,就越相信这是一个好方法。让我们通过解释您真正想要做的事情来帮助您。我们可以帮助您找到一种比动态sql更好的方法,一次只获取一列结果。这个问题毫无意义。“空白值之和”将为
NULL
0
或生成错误(取决于“空白”的表示方式)。我不知道为什么使用存储过程会在现有表上强制使用动态SQL。样本数据和期望的结果可能会有所帮助。这对我来说很有效。。现在我如何使用case-like when-empty(“”)和non-empty记录。。e、 g.以上内容是测试RuchitaP中的空白(
'
)@RuchitaP<代码>当“”时
等同于动态SQL之外的
当“”时
是的,我们如何在不为空的情况下编写大小写(“”),例如从dbo中选择@Count=SUM(case[branch]WHEN=''然后1 END)、@actcount=SUM(case[branch]WHEN not''然后1 END)。companys我不是来支持你的@RuchitaP,您需要了解SQL是如何工作的。您应该知道如何在“”时将大小写值更改为相反的…
。这就是你在这里需要做的一切。(提示:在
时移动
的位置并使用
!=
)当然,我同意并感谢您的帮助。。我没有发布我在前面的评论中写的语法。我试过使用dbo.companys中的SET varSQL=N'SELECT varCount=SUM(CASE'+QUOTENAME(varColumn)+N'WHEN=''然后1 END),varactcount=SUM(CASE'+QUOTENAME(varColumn)+N'WHEN''然后1 END);注意:我在这里写var而不是@here(仅供评论)。。