如何在SQL-Server中删除表变量?我应该这样做吗?

jtp*_*yda 115 sql sql-server table-variable

我在脚本中有一个表变量(不是存储过程).两个问题:

  1. 如何删除表变量?删除表@varName给出"不正确的snytax"错误.
  2. 我应该经常这样做吗?我听说这是一个很好的做法.像这样的小脚本真的有必要吗?

这是我的代码:

Declare @projectList table(
    name varchar(40) NOT NULL);

Insert Into @projectList
Values ('BCR-00021')

Select *
From @projectList

Drop Table @projectList -- does not work
Run Code Online (Sandbox Code Playgroud)

Hog*_*gan 175

表变量自动本地并自动删除 - 您不必担心它.

  • +1 - 即使您想要,也不能**丢弃它们 - 只要会话打开,它们就会持续存在,就像任何其他变量一样.它们也不受交易的影响. (17认同)
  • @JNKs指出它们不受事务影响很重要,您可以使用表变量来保存数据并在错误导致回滚后写入日志表. (10认同)
  • 不,它不一样。临时表参与事务。 (3认同)
  • 你不能删除它们,但你可以删除它们“删除@projectList”;) (3认同)

gbn*_*gbn 29

表变量就像int或varchar变量.

你不需要放弃它们.它们具有与int或varchar变量相同的范围规则

变量的范围是可以引用变量的Transact-SQL语句的范围.变量的范围从声明它的位置延迟到声明它的批处理或存储过程的结尾.


小智 17

如果其他人遇到这个......你真的需要像在循环中一样删除它,你可以从表变量中删除所有:

DELETE FROM @tableVariableName
Run Code Online (Sandbox Code Playgroud)

  • 但是id会增加,当你在循环中声明时它不会再次设置为1 (6认同)

小智 5

但是你们都忘了提到,如果在循环中使用变量表,则在清空循环中的数据之前需要清空(删除@table)。