Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 在不同的变量中选择Top_Sql Server_Select - Fatal编程技术网

Sql server 在不同的变量中选择Top

Sql server 在不同的变量中选择Top,sql-server,select,Sql Server,Select,也许不可能,但我想我会问 我想得到顶部并将每个保存到不同的变量中。我知道有三个选择是可能的,从前三名中选出第一、第二、第三名,但我希望在一个声明中可能做到 即 假设出于演示目的,您需要sys.objects中的前3个schema_id按对象_id排序 它使用ROW_NUMBER对行进行编号,然后将它们旋转为一行结果,用于分配变量。这是: Top按什么排序。在我排序的字段上创建了一个。添加一个行号并使用它?操作数数据类型uniqueidentifier对于max运算符无效。在此上下文中,我的架构i

也许不可能,但我想我会问

我想得到顶部并将每个保存到不同的变量中。我知道有三个选择是可能的,从前三名中选出第一、第二、第三名,但我希望在一个声明中可能做到


假设出于演示目的,您需要sys.objects中的前3个schema_id按对象_id排序

它使用ROW_NUMBER对行进行编号,然后将它们旋转为一行结果,用于分配变量。

这是:


Top按什么排序。在我排序的字段上创建了一个。添加一个行号并使用它?操作数数据类型uniqueidentifier对于max运算符无效。在此上下文中,我的架构id是一个uniqueid。@windowskm-@Var1=CASTMAXCASE当RN=1时,则CASTschema_id为BINARY16结束为UNIQUEIDENTIFIER将执行此任务。结果空间不足,无法将UNIQUEIDENTIFIER值转换为char。警告:聚合或其他集合操作会消除空值。@windowskm-将变量声明为uniqueidentifier而不是char。或者,如果必须是字符串,则至少将其设置为char36。你可以忽略这个警告。谢谢你让Kaf的版本也为我工作,但我会给你的,因为你让我在那里。不过,所有人的票数都在上升。感谢guysCan,您可以找到任何保证@rn+=1将在选择?@MartinSmith中的其他三项之后执行的文档,@rn+=1始终是当前项旁边的一项。@windowskm,它在fiddle上工作。请检查链接。看不到任何语法错误。不确定这是否是语法的原因,但您正在运行哪个版本的sql server?示例在2008上。@Kaf-SQL Server不保证表达式的求值顺序。请注意,只有在指定之间存在引用时,效果才可见@马丁史密斯:我认为这与选择@var1=col1、@var2=col2时的单行选择有关。。它不能保证是先分配@var1还是@var2。关于在该引号之后开始的多行的语句。是的,我不能证明里面发生了什么,或者不同意你的观点,但是10/10次的查询会得到相同的结果。
Declare @Var1 as int,
Declare @Var2 as int,
Declare @Var3 as int
select Top 3 [SAVE 3 RETURNED RECORDS INTO VARIABLES] from Table
Declare @Var1 as int;
Declare @Var2 as int;
Declare @Var3 as int;


WITH T AS
(
SELECT *,
       ROW_NUMBER() OVER (ORDER BY object_id) RN
FROM sys.objects
)
SELECT @Var1 = MAX(CASE WHEN RN = 1 THEN schema_id END),
       @Var2 = MAX(CASE WHEN RN = 2 THEN schema_id END),
       @Var3 = MAX(CASE WHEN RN = 3 THEN schema_id END)
FROM T 
WHERE RN <= 3;

SELECT @Var1, @Var2, @Var3
Declare @Var1 as int, @Var2 as int, @Var3 as int
Declare @rn int = 1

select top(3) @Var1 = case when @rn = 1 then val else @var1 end,
              @Var2 = case when @rn = 2 then val else @var2 end,
              @Var3 = case when @rn = 3 then val else @var3 end,
              @rn += 1 
from t
order by val

select @var1, @var2, @var3