Declare a table variable without column definitions?
Asked Answered
C

2

8

Is there a way, in SQL Server, to declare a table variable without knowing the table definitions?

Exempli gratia:

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

or

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

or

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

or

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

or

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

or

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

or

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

(you get the idea)

Carpophore answered 10/11, 2010 at 15:31 Comment(0)
S
11

Impossible. Citation from "books online":

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

Syntax Note Use DECLARE @local_variable to declare variables of type table.

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

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

"(", at least one column definition and ")" is syntactically required.

PS: AFAIK insertion into any new table from "exec" results are impossible at all. Only to a table with predefined structre.

Supat answered 10/11, 2010 at 15:40 Comment(0)
H
7

You can't do it with table VARIABLES but you can do it with TEMP tables.

-- 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
Hach answered 18/9, 2019 at 19:3 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.