我在下面看到了问题而我无法弄清楚它会做什么,因为我在这里混淆了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
答案 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可以按照它“想要”的任何顺序扫描表,顺序是未定义的,并且分配的值不是确定的。