存储过程和在其中使用临时表?

时间:2017-05-18 14:39:06

标签: sql sql-server loops stored-procedures command

我知道基本的sql命令,这是我第一次使用存储过程。在我看的存储过程中,有几个临时表。 每天早晨触发该过程,然后拉出特定ID,然后遍历每个ID以获取某些参数。

我的问题是:是存储过程中使用的临时表,这样当程序关闭时,变量将立即传递到参数和循环中,然后临时表将被清除,从而重新启动下一个循环的过程?

3 个答案:

答案 0 :(得分:2)

使用临时表是因为只要创建它们(或存储过程)的会话关闭,临时表就会消失。名称前面带有单个#的Temp表(也称为本地临时表)仅在创建它的会话中可见,因此可以在多个会话中创建具有相同名称的临时表,而不会相互碰撞( SQL Server将名称添加到名称中以使其唯一)。如果创建了一个前面有两个##的临时表(全局临时表),那么它在SQL Server中是唯一的,因此其他会话可以看到它。临时表相当于便笺簿。重新启动SQL Server时,所有临时表及其值都消失了。临时表可以为它们创建索引,SQL Server可以使用临时表的统计信息来创建有效的查询计划。

答案 1 :(得分:2)

对于存储过程(SP),它们是受限最少且功能最强的对象,例如:

  • 他们通常的替代方案,观点和功能,不允许使用很多东西,比如DML语句,temp。表,交易等。
  • SP可以避免返回结果集。它们也可以返回多个结果集。

对于临时。表:

  • 是的,一旦SP完成,表格就会随之消失 内容(至少对于单#表)。
  • 他们有优势和优势 与其替代品相比的缺点(实际表格,表格 可变形,各种非桌面解决方案)。

答案 2 :(得分:1)

在我看来,存储过程并不强制需要临时表。由SP决定是否使用TempTable是最好的方法。

例如,假设我们想要检索从连接几个表中出来的元素列表,那么最好有一个TempTable来放置连接的字段。另一方面,如果我们使用存储过程来检索单个或字段,我就不会看到对Temp表的需要。

临时表仅在使用存储过程期间可用,一旦完成,表格超出范围。