sql - 使用变量查询

标签 sql sql-server subquery query-variables

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

伪代码:

SELECT animal_name,
    @tallest_animal = (select top 1 height from animal order by height desc) as tallest,
    @smallest_animal = (select top 1 height from  animal order by height asc) as smallest
FROM animals
WHERE height BETWEEN @smallest_animal AND @tallest_animal

我知道可以通过改变查询来实现结果,我的问题的真正用途很难解释。

有问题的是 Microsoft SQL Server。 :)

最佳答案

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

为此,您需要:

SELECT @YourVariable = Column
FROM Animals

注意:将字段分配给变量时不能使用 AS。

您必须确保查询中的所有字段都分配给一个变量,否则您将收到以下错误:

A SELECT statement that assigns a value to a variable must not be combined with data- retrieval operations.

要解决这个问题,只需将 AnimalName 分配给 @AnimalName 变量即可。

编辑:

DECLARE @AnimalName  VARCHAR(20)
DECLARE @TallestAnimal  INT
DECLARE @SmallestAnimal INT

SELECT @AnimalName = animal_name,
   @TallestAnimal  = (select top 1 height from animal order by height desc),
   @SmallestAnimal = (select top 1 height from  animal order by height asc) 
FROM animals
WHERE height BETWEEN @SmallestAnimal AND @TallestAnimal 

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

关于sql - 使用变量查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10206325/

相关文章:

mysql - 优化不存在的 SQL 查询

sql-server - 在表之间设置外键时是否可以忽略varchar长度?

sql-server - 使用 ADO 时返回成功执行 SQL 的数据库消息

sql - 选择表中元组的最大值

MySQL使用同一个表的子查询

sql - SQL Server:按给定因子多次选择一行

mysql - 在简单查询中使用文件排序

mysql连接5个表

sql - 删除特定列中具有重复列数据的行

sql-server - 允许远程连接到不同域中的 SQL Server 的防火墙规则