我有一个存储过程,返回250的结果!列。
但我只需要250个中的3个。
我想调用SP并仅将3列值放在临时表中。 我不想定义250列的临时表!
这就是我想要的方式,但这当然不起作用:
create #myTempTable (id int, value1 int, value2 int)
insert into #myTempTable
exec myBigFatStoredProc
无论如何都可以吗?
Bye Juergen
答案 0 :(得分:1)
一种方法是将原始存储过程切换到导致TABLE的用户定义函数。然后你可以做(例如):
SELECT id, value1, value2
FROM dbo.fxnMyFunctionThatReturns250Columns('SomeParameter') x
关于这一点的“令人不舒服”的事情是,您只希望3列始终具有返回所有250列的开销/命中。
这可能值得单独使用,因为它可能意味着3列方案可以产生更优化的执行计划。
答案 1 :(得分:0)
你可以使用这个出色的答案:Insert results of a stored procedure into a temporary table
简而言之,它使用OPENROWSET将存储过程执行到即时创建的#temp表中,而无需命名和键入所有列。
答案 2 :(得分:0)
这是不重用代码的时候。您只需要三列然后编写一个执行该操作的proc。即使您只能将所需的三列放入临时表中,您仍然在浪费生成它们的资源。