2014-02-20 57 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'的默認定義,並且在這種情況下看起來不夠堅硬。 –