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

Ian*_*oyd 4 stored-procedures sql-server-2000

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

免责声明:

DECLARE @Results TABLE
INSERT INTO @Results EXEC MyProc @param1 = @myValue
Run Code Online (Sandbox Code Playgroud)

要么

DECLARE @Results TABLE
SELECT INTO @Results EXEC MyProc @param1 = @myValue
Run Code Online (Sandbox Code Playgroud)

要么

DECLARE @Results TABLE
EXEC MyProc @param1 = @myValue INTO @Results
Run Code Online (Sandbox Code Playgroud)

要么

DECLARE @Results TABLE
EXEC INTO @Results MyProc @param1 = @myValue
Run Code Online (Sandbox Code Playgroud)

要么

DECLARE @Results TABLE
SELECT * FROM EXEC MyProc @param1 = @myValue INTO @Results
Run Code Online (Sandbox Code Playgroud)

要么

DECLARE @Results TABLE
SELECT * INTO @Results FROM EXEC MyProc @param1 = @myValue
Run Code Online (Sandbox Code Playgroud)

要么

DECLARE @Results TABLE
SELECT * INTO @Results EXEC MyProc @param1 = @myValue
Run Code Online (Sandbox Code Playgroud)

(你明白了)

Bad*_*boy 6

不可能.来自"在线图书"的引文:

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

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

table_type_definition ::= 
  TABLE ( { column_definition | table_constraint } [ ,...n ] ) 
Run Code Online (Sandbox Code Playgroud)

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

"(","至少一个列定义和")"在语法上是必需的.

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


BCl*_*don 6

您不能使用表 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
Run Code Online (Sandbox Code Playgroud)