SQL Server存储过程SELECT DISTINCT

时间:2014-02-20 14:52:57

标签: sql sql-server stored-procedures

我正在努力破译一些存储过程,并且在这个主题上的词汇量很少。有人可以向我解释这个'1'在下面的陈述中起什么作用?我找不到任何DISTINCT语法教程来解释这个。我指的是声明中的实际“1”。

USE TEST
GO
SET ANSI_NULLS, QUOTED_IDENTIFIER ON
GO

 CREATE PROCEDURE [dbo].sp_F_SQL 
 (@Id int) 
 WITH ENCRYPTION AS  
 SELECT DISTINCT 
    dbo.MAP_SQL.rID, 
    dbo.MAP_SQL.lID, 
    dbo.MAP_SQL.cID, 
    **1** as RESPFACT, 
    dbo.MAP_SQL.Longitude, 
    dbo.MAP_SQL.Latitude, 
    dbo.MAP_SQL.Altitude,

... 

2 个答案:

答案 0 :(得分:2)

1DISTINCT无关。它只是添加了一个标题为RESPFACT的输出列,其值为1,适用于所有行。我怀疑消费输出需要该列。

SELECT DISTINCT仅返回输出中的“distinct”行 - 表示所有列值相等的行。

e.g。如果输出没有 distinct

1   2   ABC   DEF
2   3   GHI   JLK
2   1   ABC   DEF
1   2   ABC   DEF

然后第1行和第4行将被视为“相等”,并且将返回第1行和第4行:

1   2   ABC   DEF
2   3   GHI   JLK
2   1   ABC   DEF

请注意,即使4列值中有3列匹配,第1行和第3行也不相等。

答案 1 :(得分:2)

1生成一个名为RESPFACT的列。此值始终为1

我不能说为什么这对sp_F_SQL程序很重要。

distinct返回唯一的行。如果select中的列存在重复值,则只返回一行。显然,RESPFACT列在所有行中都是相同的,因此它不会影响返回的行。