SQL Server:在变量多列

时间:2016-03-24 09:26:34

标签: sql sql-server tsql

我需要计算此表中不同项目的数量,但不同的是存储在变量中的许多列。这是2件要求。

要求1:

SELECT COUNT(DISTINCT (CHECKSUM(code_paiement,id_emetteur,id_liaison)))
FROM [DB1].[dbo].[Vo_Fait]

要求2:

declare @var nvarchar(4000) = 'code_paiement, id_emetteur, id_liaison'

SELECT COUNT(DISTINCT (CHECKSUM(@var)))
FROM [DB1].[dbo].[Vo_Fait]

但是这2令的结果是不同的!

  • 结果要求1:45205
  • 结果要求2:1

1 个答案:

答案 0 :(得分:1)

在“req2”中,您将获取字符串'code_paiement,id_emetteur,id_liaison'的校验和,它将始终相同,并计算它的不同值,它始终为1.

以这种方式思考:您的代码简化为:

SELECT COUNT(DISTINCT (CHECKSUM('code_paiement,id_emetteur,id_liaison')))
FROM [DB1].[dbo].[Vo_Fait]

......与以下内容相同:

SELECT COUNT(DISTINCT (-1998057055))
FROM [DB1].[dbo].[Vo_Fait]

所以你要计算表格中每一行的数字-1998057055的不同出现次数;因为每行的值相同,所以只有一个不同的出现。

如果你真的需要动态构建你的SQL代码(通常你应该通过改变你的设计来避免这种情况),那么你应该使用execsp_executesql之类的东西。一个简单的例子:

DECLARE @var NVARCHAR(4000) = 'code_paiement,id_emetteur,id_liaison';
DECLARE @sql NVARCHAR(4000)='SELECT COUNT(DISTINCT(CHECKSUM(' + @var + '))) FROM [DB1].[dbo].[Vo_Fait]';
EXEC (@sql);