31

什么是表变量?以及如何使用与现有存储过程结果集匹配的列创建表变量(虚拟内存表)。

我执行了该过程,执行后,我知道列名。但是我是否必须声明与存储过程中相同的列数据类型?

编辑:我试过这个

DECLARE @Table TABLE( 
name varchar(30) NOT NULL, 
location varchar(30) NOT NULL 
); 

INSERT @Table 
SELECT name, location FROM 
Exec SPROC @param , @param
4

1 回答 1

31

@tableName表变量仅在脚本运行期间有效,即它们只是会话级对象。

为了测试这一点,在 sql server management studio 下打开两个查询编辑器窗口,并创建名称相同但结构不同的表变量。你会有一个想法。因此,该@tableName对象是临时的,用于我们内部的数据处理,它对实际的数据库结构没有贡献。

可以创建另一种类型的表对象以供临时使用。它们是#tableName像物理表的类似创建语句一样声明的对象:

Create table #test (Id int, Name varchar(50))

该表对象被创建并存储在临时数据库中。与第一个不同,这个对象更有用,可以存储大数据并参与事务等。这些表在连接打开之前都是活动的。在重新创建之前,您必须通过以下脚本删除创建的对象。

IF OBJECT_ID('tempdb..#test') IS NOT NULL
  DROP TABLE #test 

希望这是有道理的!

于 2012-03-15T05:21:10.400 回答