17

To my knowledge; what I want to do is not possible in sql, but it is worth asking you guys.

Lets say I have a stored procedure abc that returns columns Id and Value. This stored procedure is mainly being used by other departments for functional reasons and I will only use it every now and again for data checks.

So using it as part of my stored procedure:

DECLARE @tABC TABLE
(
   ID      INT,
   Value   DECIMAL(12,2)
)

INSERT INTO @tABC
   EXEC OtherDb.DataProd.abc

Oky so this will work perfectly for now, but what if they change the structure of their stored procedure?

Adding or removing a column from their stored procedure will break my code, so is there a way of making my code more flexible.

My last desperate attempt went something like this:

WITH tempTable AS
(
    EXEC OtherDb.DataProd.abc
)
SELECT ID, Value FROM tempTable

Which obviously failed miserably.

4
  • 4
    That is why you should use table valued functions or table variables instead of stored procedures to return tables. Anyway, OPENROWSET might be a solution for you Commented Nov 29, 2013 at 7:30
  • @adrianm Your comment about UDFs actually solved my issue. I cant believe I did not see that before. Commented Dec 3, 2013 at 6:13
  • possible duplicate of Insert results of a Stored Procedure into a Temporary Table Commented Apr 22, 2015 at 17:40
  • No matter how dynamic your code is if they remove columns that you use your code is broken. Do not add unnecessary overhead to your process due to poor change control. I have done a lot of dynamic code, but never for the reason of poor change control Commented Jul 20, 2016 at 9:15

4 Answers 4

8
SELECT * INTO #TempTable 
FROM OPENROWSET
('SQLNCLI','Server=(local)\SQL2008R2;Trusted_Connection=yes;',
     'EXEC OtherDb.DataProd.abc')

SELECT * FROM #TempTable
Sign up to request clarification or add additional context in comments.

2 Comments

Is enabling OPENROWSET not a security risk?
To a certain extent, yes. But there is no other way of meeting your requirement, AFAIK
6

Insert into a temp table. I know this works in 2008 and above, not sure about 2005. Your temp table columns must match your Stored Proc columns.

create table #mytable (custid int,company varchar(50),contactname varchar(50)
                , phone varchar(50),address1 varchar(50)
                , address2 varchar(50),city varchar(50)
                ,st varchar(2),zip varchar(20))

insert into #mytable (custid,company,contactname,phone,address1,address2,city,st,zip)
exec dbo.sp_Node_CustomerList_wService @segid = 1

select * from #mytable
where custid = 5

drop table #mytable

2 Comments

The question says "Oky so this will work perfectly for now, but what if they change the structure of their stored procedure?" So this is not a good solution.
I agree with the comment by: Adriaan Davel Jul 20 '16 at 9:15 See his comment above.
1

It is better and easy way to use openrowset

SELECT * INTO #tempTable FROM OPENROWSET('SQLNCLI', 'Server=localhost;Trusted_Connection=yes;', 'EXEC OtherDb.DataProd.abc')

1 Comment

Please add some description to answer.
0

Otherwise have a look over here, there are more options explained there: Insert results of a stored procedure into a temporary table?

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.