2012-03-13 37 views
29

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

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

编辑:我想这

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

INSERT @Table 
SELECT name, location FROM 
Exec SPROC @param , @param 
+6

只是一句警告:表格变量不能保证在内存中。这是一个神话。 – JohnFx 2012-03-13 05:13:33

+0

你能包括你到目前为止的代码,以便我们可以回答你的问题吗? – JohnFx 2012-03-13 05:14:10

+0

@JohnFx我没有执行创建表变量的代码。我做了一个存储过程,并在执行它后,我得到了一些列名,现在我想要这些列名存储在表变量中。 如果它不总是在内存中,那么我怎么能在我的数据库中找到它,对不起,我很烦恼,我是新的SQL。请帮忙。 – Pankaj 2012-03-13 05:20:53

回答

29

@tableName表变量是活着的运行脚本的时间只有即他们只会话级别的对象。

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

还有另一种类型的表格对象,可以创建临时使用。他们都宣称像物理表类似create语句#tableName对象:

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

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

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

希望这是有道理的!

+1

最后用这个部分完成。 :) – Pankaj 2012-03-23 08:06:54