2014-02-20 58 views
0

我正在解密一些存储过程,并且对这个主题有最少的词汇量。有人可以向我解释这个'1'在下面的陈述中起什么作用吗?我无法找到任何DISTINCT语法教程来解释这一点。我指的是陈述中的实际“1”。SQL Server存储过程SELECT DISTINCT

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, 

... 
+0

1只是作为一个常数值,没有更多 – NickyvV

回答

2

1无关与DISTINCT。它只是为所有行添加标题为RESPFACT的输出列,其值为1。我怀疑是不是消耗输出需要那个列。

SELECT DISTINCT只返回输出中的“不同”行 - 意味着所有列值相等的行。

例如如果你的输出没有不同的是

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

然后行1和4会被视为“平等”和ONY一个将返回:

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

注意行1和3是不相等即使4个列值中的3个匹配。

+0

不理解DISTINCT,在语句中的1是什么? – Ccorock

+0

@Ccorock好吧,从原来的问题不清楚 - 我已经添加到我的答案。 –

2

1生成名为RESPFACT的列。这总是有价值1

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

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

+0

这当然不是一个名为ENCRYPTION的CTE ..;)我想你错过了一个逗号 – NickyvV

+0

@NickyvV。 。 。谢谢你和马丁。我有'with'的默认定义,并且在这种情况下看起来不够坚硬。 –