如何在 T SQL 中创建 SQL 变量 byRef(刷新其值)?

How to create SQL Variable byRef (Refreshing its value) in T SQL?

我想知道我是否可以在 T-SQL 中创建一个变量,它会在脚本流中自行刷新。

我想创建一个引用其他 2 个变量的总和的变量。

例如:

DECLARE @Number1 INT
DECLARE @Number2 INT
DECLARE @Total   INT
SET @Number1 = 5
SET @Number2 = 10

SET @Total = @Number1 + @Number2
SELECT @Total 

这将显示 15。

但是,如果我在脚本的后面几行中设置:

SET @Number1 = 15
SET @Number2 = 25

SELECT @Total

还是会显示15。我知道在赋值的时候,它得到了@Number1 + @Number2 的值。

有什么方法可以 update/refresh @Total 变量的值而不用做: SET @Total = @Number1 + @Number2要刷新它的值?

我正在寻找,一旦@Number1 或@Number2 的值发生变化(或两者都发生变化),@Total 也会自动重新计算。

我环顾四周,但找不到任何相关信息。也许很难在 google 上为我正在寻找的内容制作 "search term"。

谢谢。

您不能在 TSQL 变量上创建触发器(或事件)。在 table 中,有些触发器的工作方式有点像您要求的与列和/或行有关的触发器。

不,没有办法用变量来做到这一点。

2 个备选方案,这可能无济于事,但会告诉您尝试执行您的要求是多么笨拙:

您可以使用 table 中的计算列来完成此操作,您可以将所有三个变量替换为 table 中的列,而不是设置和获取变量,您将插入和 select 从 table 或

您可以使用 UDF 来实现,每次您想要引用 Total 的值时,您将调用 fnTotal(Number1, Number2)。

您不能将其作为单个变量。但是如果你真的想要这个,你可以使用一个带有计算列的 table 变量:

DECLARE @V TABLE(Number1 INT, Number2 INT, Total AS Number1 + Number2);
INSERT @V (Number1, Number2) VALUES (5, 10);

SELECT Total FROM @V;  -- 15

UPDATE @V SET Number1 = 15, Number2 = 25;

SELECT Total FROM @V;  -- 40

这很可爱,但我绝对不建议在生产系统中这样做。为此使用 table 而不是单独的变量是非常低效的 - table 变量在 tempdb 中使用 I/O,虽然其中大部分都经过优化并且实际上没有接触磁盘,但I/O 仅仅因为您不想将两个数字相加就很沉重,尤其是当您开始到处使用这种技术时。

如果您不反对重做加法,您仍然可以通过使用多重赋值来节省输入时间:

DECLARE @Number1 INT, @Number2 INT, @Total INT;
SELECT @Number1 = 5, @Number2 = 10, @Total = @Number1 + @Number2;

SELECT @total   -- 15

SELECT @Number1 = 15, @Number2 = 25, @Total = @Number1 + @Number2;

SELECT @total   -- 40