2011-05-22 19 views
30

Estoy tratando de hacer una consulta simple a mi servidor y quiero que el resultado se almacene en la variable @times.sql set variable usando COUNT

DECLARE @times int 

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

IntelliSense dice Wrong syntax near Select

Respuesta

66

Sólo se necesita paréntesis alrededor de su selecto:

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

o puede hacerlo de esta manera:

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

Puede seleccionar directamente en la variable en lugar de utilizar el sistema:

DECLARE @times int 

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

Si es necesario configurar múltiples variables que se pueden hacer desde el mismo seleccione (ejemplo un poco artificial):

DECLARE @wins int, @losses int 

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

Si le gusta usar el conjunto, se pueden utilizar paréntesis:

DECLARE @wins int, @losses int 

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

Puedes pero no ** necesita ** para seleccionar directamente en la variable. –

+0

@ypercube: Pero si adquiere el hábito de usar seleccionar, no intentará usar 2 o más comandos set + select cuando 1 select puede establecer todas las variables a la vez. También encuentro SELECCIONADO para ser más legible. – lambacck

+0

No estoy de acuerdo con la legibilidad, pero ese es el gusto personal. Para mí, legible sería 'SET (@ var1, @ var2, ..., @varn) = (SELECCIONAR ...)' –

1

que desee:

DECLARE @times int 

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

Usted también no necesita la cláusula 'como'.

0

Puede utilizar SELECT como lambacck dijo o añadir paréntesis:

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