2011-05-22 59 views
30

我试图做一个简单的查询到我的服务器,并希望结果集中变量存储在变量@times。SQL中使用COUNT

DECLARE @times int 

SET @times = SELECT COUNT(DidWin)as "I Win" 
FROM thetable 
WHERE DidWin = 1 AND Playername='Me' 

智能感知说Wrong syntax near Select

回答

66

你只需要括号围绕你的选择:

SET @times = (SELECT COUNT(DidWin) FROM ...) 

或者你也可以做这样的:

SELECT @times = COUNT(DidWin) FROM ... 
8

可以直接选择到变量,而不是使用集:

DECLARE @times int 

SELECT @times = COUNT(DidWin) 
FROM thetable 
WHERE DidWin = 1 AND Playername='Me' 

如果需要设置多个变量,你可以从相同的选择(例如做有点做作):

DECLARE @wins int, @losses int 

SELECT @wins = SUM(DidWin), @losses = SUM(DidLose) 
FROM thetable 
WHERE Playername='Me' 

如果你偏爱使用set,您可以使用括号:

DECLARE @wins int, @losses int 

SET (@wins, @losses) = (SELECT SUM(DidWin), SUM(DidLose) 
FROM thetable 
WHERE Playername='Me'); 
+0

你可以,但哟你不需要**直接选择变量。 – 2011-05-22 14:23:11

+0

@ypercube:但是,如果你在使用选择的习惯得到的,你不会尝试使用2个或更多套+选择命令时,1可以选择一次性设置所有的变量。我也发现SELECT更具可读性。 – lambacck 2011-05-22 14:25:26

+0

我不同意可读性,但这是个人的品味。读我将'SET(@ VAR1,@ VAR2,...,@varn)=(SELECT ...)' – 2011-05-22 14:28:32

1

你想:

DECLARE @times int 

SELECT @times = COUNT(DidWin) 
FROM thetable 
WHERE DidWin = 1 AND Playername='Me' 

你也不需要 '为' 条款。

0

您可以使用SELECTlambacck说 或加括号:

SET @times = (SELECT COUNT(DidWin)as "I Win" 
FROM thetable 
WHERE DidWin = 1 AND Playername='Me');