SQL Server:如何使用变量

时间:2018-02-21 20:02:52

标签: sql-server azure-sql-database

这是一个非常初学的问题,但变量在SSMS中如何实际起作用?我有以下3个陈述:

DECLARE @p1 TABLE (col2 VARCHAR(30))

UPDATE t 
SET col2 = 'Peter', col3 = GETDATE()
OUTPUT CAST(INSERTED.col3 AS VARCHAR(30)) i
INTO @p1
WHERE col1 = 1

SELECT * FROM @p1

在SSMS中,如果我突出显示所有3个语句并一起执行它们,则语句按预期工作。但如果我选择&一次运行一个,我收到一条错误消息

  

Msg 1087,Level 15,State 2,Line 71
  必须声明表变量" @ p1"

特定执行期间T-SQL变量是否可用?还有另一种技术可以实际设置"一个变量在整个Session中持续存在?

2 个答案:

答案 0 :(得分:1)

是的,变量仅适用于给定的执行(或批量,正如Sean的评论所解释的那样)。

没有任何设置或技术可以让变量在整个会话期间保持不变,但temp tables会这样做。

答案 1 :(得分:1)

Sean Lange上面的评论是正确的。在这种情况下,您似乎希望将数据插入表变量,然后能够使用表中的数据。您可以使用临时表来完成此操作,并且在您删除它或关闭查询窗口之前,该表将可用。

Create table #p1 (col2 varchar(30))

UPDATE t SET col2 = 'Peter', col3 = getdate()
OUTPUT CAST(INSERTED.col3 AS varchar(30))i
into #p1
WHERE col1 = 1

select * from #p1