声明没有列定义的表变量?

时间:2010-11-10 15:31:45

标签: stored-procedures sql-server-2000

在SQL Server中,有没有办法在不知道表定义的情况下声明表变量?

Exemptigratia:

DECLARE @Results TABLE
INSERT INTO @Results EXEC MyProc @param1 = @myValue

DECLARE @Results TABLE
SELECT INTO @Results EXEC MyProc @param1 = @myValue

DECLARE @Results TABLE
EXEC MyProc @param1 = @myValue INTO @Results

DECLARE @Results TABLE
EXEC INTO @Results MyProc @param1 = @myValue

DECLARE @Results TABLE
SELECT * FROM EXEC MyProc @param1 = @myValue INTO @Results

DECLARE @Results TABLE
SELECT * INTO @Results FROM EXEC MyProc @param1 = @myValue

DECLARE @Results TABLE
SELECT * INTO @Results EXEC MyProc @param1 = @myValue

(你明白了)

2 个答案:

答案 0 :(得分:6)

不可能。来自“在线图书”的引文:

==============

语法 注意使用DECLARE @local_variable声明类型为table的变量。

table_type_definition ::= 
  TABLE ( { column_definition | table_constraint } [ ,...n ] ) 

==============

“(”,“至少有一个列定义和”)“在语法上是必需的。

PS:从“exec”结果插入任何新表的AFAIK根本不可能。仅限具有预定义结构的表。

答案 1 :(得分:0)

您不能使用表VARIABLES来做到这一点,但是可以使用TEMP表来做到这一点。

-- Drop the table, if it exists
IF OBJECT_ID(N'tempdb.dbo.#tmpMyTable',N'U') IS NOT NULL
DROP TABLE #tmpMyTable


SELECT
  ColumnA,
  ColumnB

INTO #tmpMyTable

FROM MyTable

-- Then clean up after yourself
DROP TABLE #tmpMyTable