Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用计数的sql集合变量_Sql Server_Tsql - Fatal编程技术网

Sql server 使用计数的sql集合变量

Sql server 使用计数的sql集合变量,sql-server,tsql,Sql Server,Tsql,我试图对我的服务器进行一个简单的查询,并希望结果存储在变量@times中 DECLARE @times int SET @times = SELECT COUNT(DidWin)as "I Win" FROM thetable WHERE DidWin = 1 AND Playername='Me' IntelliSense表示Select附近的语法错误您可以直接选择变量,而不是使用set: DECLARE @times int SELECT @times = COUNT(DidWin)

我试图对我的服务器进行一个简单的查询,并希望结果存储在变量@times中

DECLARE @times int

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

IntelliSense表示Select附近的
语法错误

您可以直接选择变量,而不是使用set:

DECLARE @times int

SELECT @times = COUNT(DidWin)
FROM thetable
WHERE DidWin = 1 AND Playername='Me'
如果需要设置多个变量,可以从同一个选择中进行设置(例如有点做作):

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

DECLARE @wins int, @losses int

SET (@wins, @losses) = (SELECT SUM(DidWin), SUM(DidLose)
FROM thetable
WHERE Playername='Me');
SET @times = (SELECT COUNT(DidWin)as "I Win"
FROM thetable
WHERE DidWin = 1 AND Playername='Me');
你想要:

DECLARE @times int

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

您也不需要“as”子句。

您只需要在select(选择)语句周围加上括号:

SET @times = (SELECT COUNT(DidWin) FROM ...)
或者你可以这样做:

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

您可以使用
SELECT
作为lambacksaid 或添加括号:

DECLARE @wins int, @losses int

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

如果需要打印列名为“c”的结果,或使用“c”列名在代码中读取结果:

DECLARE @c int;
SELECT c = count(*) from '%Table%' WHERE '%condition%'

您可以,但不需要直接在变量中进行选择。@ypercube:但是如果您养成了使用选择的习惯,当一个选择可以同时设置所有变量时,您就不会尝试使用两个或更多的set+select命令。我还发现SELECT更具可读性。我不同意可读性,但这是我个人的品味。对我来说,可读性应该是
SET(@var1,@var2,…,@varn)=(SELECT…
我喜欢赋值接近变量名。如果有许多赋值,则很难选择select中的哪个项应用于哪个变量。更不用说你会有更多的代码。这不会将结果分配给变量。它将返回一个名为c的列的结果集。变量@c将为null。并且不能在单个语句中赋值和返回。