在SQL Server中使用declare变量

时间:2018-03-14 04:59:39

标签: sql sql-server

我在下面看到了问题而我无法弄清楚它会做什么,因为我在这里混淆了DECLARE的概念。

假设今天的日期是2014年12月31日,当check_out_date的值为“119”时,currency_x_id的值为“2017年3月12日”。执行以下SQL语句后,以下哪项标识@currency_date的值:

DECLARE @currency_date SMALLDATETIME = GETDATE()

SELECT @currency_date = check_out_date
FROM currency_history
WHERE currency_x_id = 119

1 个答案:

答案 0 :(得分:2)

声明变量时,可以在同一语句中为其指定初始值:

DECLARE @currency_date smalldatetime = getdate()

稍后,您可以为该变量指定其他值。它是一个变量,意味着它的值可能会随着程序的执行而改变。

您发布的代码执行以下操作:

Allocate memory for storing @currency_date
Assign current date and time (now) to @currency_date
For each row in currency_history table whose currency_x_id is equals to 119:
    assign the value of check_out_date column to @currency_date variable

那么包含@currency_date的值是多少?嗯,这取决于。

如果currency_history表中currency_x_id等于119的行没有,则该值将是当前日期和时间。

如果有一行,则该值将是该行的check_out_date列的值。

如果有更多行,则该值将是最后指定的值。但是,这是最后一个?好吧,查询没有指定任何顺序,SQL Server可以按照它“想要”的任何顺序扫描表,顺序是未定义的,并且分配的值不是确定的。