在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
(你明白了)
答案 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