gpt4 book ai didi

sql-server - 是否可以在sql中的同一条语句中读取和分配变量?

转载 作者:行者123 更新时间:2023-12-04 06:22:55 25 4
gpt4 key购买 nike

我在 SQL Server 上使用 TSQL。是否可以编写一个同时读取和更新临时变量的语句?例如。 (假设定义了@var1 和var2)

select top 1 @var1 = field1, @var2 = field2 from table1 where field1 > @var1;

还是应该拆分成:

select top 1 @var1 = field1, @var2 = field2 from table1 where field1 > @current_var1;
set current_var1 = @var1;

以前的解决方案会不会导致任何并发问题?更一般地说,有什么问题吗?我查看了 MSDN 文档,但找不到任何相关信息。

最佳答案

Is it possible to read and assign variable in the same statement?

是的,至少在某些时候是这样。以下按预期工作

DECLARE @number INT =  2147483647

SELECT @number = number
FROM master..spt_values
WHERE number < @number
ORDER BY number

SELECT @number, @@ROWCOUNT

即使在第一行被处理后 -32768 被分配给变量 WHERE 子句显然仍然使用 2147483647 的初始值而不是新值 - 因为 @@ROWCOUNT 显示它处理了整个表并且 @number 以最终赋值的结果结束。

所以在这种情况下,变量的初始值被视为 runtime constant并且不受任务的影响。我怀疑这种行为是否得到保证。一般跨多行变量赋值的效果是无法保证的。

我还尝试了以下方法以确保正在评估变量 RBAR 并且结果仍然与上面相同。

CREATE FUNCTION [dbo].[F](@I1 INT,@I2 INT)
RETURNS INT
AS
BEGIN
RETURN @I1
END

GO
DECLARE @number INT = 2147483647
SELECT @number = number
FROM master..spt_values
WHERE number < [dbo].[F](@number, number)
ORDER BY number

SELECT @number, @@ROWCOUNT

关于sql-server - 是否可以在sql中的同一条语句中读取和分配变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41908787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com