Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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 Server_Subquery_Query Variables - Fatal编程技术网

Sql server 带变量的查询

Sql server 带变量的查询,sql-server,subquery,query-variables,Sql Server,Subquery,Query Variables,是否可以在查询中设置/读取变量 伪代码: 我知道通过改变查询可以得到不同的结果,我的问题的实际用途很难解释 有问题的是Microsoft SQL Server: 是,您可以在查询中设置变量。您的语法实际上非常接近 为此,您需要: SELECT @YourVariable = Column FROM Animals 注意:将字段指定给变量时,不能使用AS 必须确保查询中的所有字段都已分配给变量,否则将出现以下错误: 为变量赋值的SELECT语句不能与数据检索操作结合使用 要克服此问题,只需将An

是否可以在查询中设置/读取变量

伪代码:

我知道通过改变查询可以得到不同的结果,我的问题的实际用途很难解释


有问题的是Microsoft SQL Server:

是,您可以在查询中设置变量。您的语法实际上非常接近

为此,您需要:

SELECT @YourVariable = Column
FROM Animals
注意:将字段指定给变量时,不能使用AS

必须确保查询中的所有字段都已分配给变量,否则将出现以下错误:

为变量赋值的SELECT语句不能与数据检索操作结合使用

要克服此问题,只需将AnimalName指定给@AnimalName变量

编辑:


此代码假定高度字段的类型为INT。

否,不可能,请按如下方式使用:

DECLARE @tallest_animal int, @smallest_animal int
SET @tallest_animal=(SELECT max(height) from animals)
SET @smallest_animal=(SELECT min(height) from animals)
SELECT animal_name from animals where height between @tallest_animal AND @smallest_animal

类似这样的方法会奏效,但我不确定您在寻找什么。

您可以使用派生表而不是变量

select A.animal_name, M.tallest, M.smallest
from animals A
  inner join 
      (
        select max(height) as tallest,
               min(height) as smallest
        from animal
      ) M
    on A.height between M.smallest and M.tallest

select语句不可能在同一select语句中为变量赋值并返回结果集-这是SQL Server的限制。如果可能的话,那不是很好吗

如果需要一条语句,为什么要在这里使用变量?以下这些对你不起作用吗

WITH cte (tallest, smallest) AS (
    SELECT MAX(height), MIN(height) FROM animals
)
SELECT animal_name FROM animals, cte WHERE height BETWEEN smallest AND tallest
如果希望稍后在存储过程中使用变量,则唯一的选择是使用两个select语句:一个用于赋值,一个用于select:

DECLARE @tallest INT, @smallest INT
SELECT @tallest = MAX(height), @smallest = MIN(height) FROM animals
SELECT animal_name FROM animals WHERE height BETWEEN @smallest AND @tallest

请注意,使用ADO时,可以在ADO命令中使用复合查询。换句话说,您的命令组件可以包含多个语句,因此上述两种解决方案都可以使用。

通过此查询您想要实现什么?用文字解释plz:这是一个复杂的查询,根据不同的时间戳等收集了大量信息,因此我需要计算价格和消费率。在一个sql查询中,我多次生成相同的子查询,我认为设置一个变量并重新使用它会很有效。感谢所有回复。。。给我一分钟测试一下:测试过。。。。声明@test varchar10 select*,@test=select top 1 userid from users order by userid desc from Transmission.dbo.users Result.…为变量赋值的select语句不得与数据检索操作组合使用。所以它不起作用了seames@freand-在我的帖子中阅读我的评论。这是因为您选择了*。您需要将所有字段分配给一个变量,就像您使用@test.Right所做的那样!这是一种方法。。。但我有大约40个专栏。。。。将所有变量分配给变量将是一件麻烦的事:但是谢谢anyhow@freand哈哈,好的。我根据你的动物问题给了你一个解决方案。不管怎样,希望能有帮助。不。。。我需要在同一查询中设置和读取变量:
WITH cte (tallest, smallest) AS (
    SELECT MAX(height), MIN(height) FROM animals
)
SELECT animal_name FROM animals, cte WHERE height BETWEEN smallest AND tallest
DECLARE @tallest INT, @smallest INT
SELECT @tallest = MAX(height), @smallest = MIN(height) FROM animals
SELECT animal_name FROM animals WHERE height BETWEEN @smallest AND @tallest