EXECUTE cannot be used as a source when inserting into a table variable.

the following format works in 2005, not in 2000...

what would be the equivalent of the same in 2000?
insert @test
EXEC ('EXEC ' + @database_name + '.dbo.sp_helprotect')

*@test is a table variable
*@database_name is a temp variable
LVL 6
anushahannaAsked:
Who is Participating?
 
cyberkiwiCommented:
There is only one - the table variable
I was iterating through options, and removed the double EXEC while doing that
This works as well
if object_id('tempdb..#test') is not null drop table #test;
declare @database_name varchaR(100) set @database_name = 'master'
declare @test table (owner sysname, object sysname, grantee sysname, grantor sysname, protecttype sysname, action sysname, [column] varchar(1000))
create table #test (owner sysname, object sysname, grantee sysname, grantor sysname, protecttype sysname, action sysname, [column] varchar(1000))
declare @sql varchar(1000)
insert #test
EXEC ('EXEC ' + @database_name + '.dbo.sp_helprotect')
--set @sql = 'insert #test EXEC [' + @database_name +'].dbo.sp_helprotect'
--exec(@sql)
insert @test select * from #test
select * from @test

Open in new window

0
 
chapmandewCommented:
Yep, you can't do that in 2005.  2008 you can I believe, but not 2005.  Use temp tables instead.
0
 
anushahannaAuthor Commented:
no, i meant to say
insert @test
EXEC ('EXEC ' + @database_name + '.dbo.sp_helprotect')

works in 2005, not in 2000.

how would you do it in 2000?
0
Cloud Class® Course: Python 3 Fundamentals

This course will teach participants about installing and configuring Python, syntax, importing, statements, types, strings, booleans, files, lists, tuples, comprehensions, functions, and classes.

 
cyberkiwiCommented:
Just a sql server 2000 limitation.
#Temp works, so a 2-step process will work

if object_id('tempdb..#test') is not null drop table #test;
declare @database_name varchaR(100) set @database_name = 'tempdb'
declare @test table (owner sysname, object sysname, grantee sysname, grantor sysname, protecttype sysname, action sysname, [column] varchar(1000))
create table #test (owner sysname, object sysname, grantee sysname, grantor sysname, protecttype sysname, action sysname, [column] varchar(1000))
insert #test
EXEC master.dbo.sp_helprotect
insert @test select * from #test
select * from @test
0
 
anushahannaAuthor Commented:
in other words,
EXEC ('EXEC ' + @database_name + '.dbo.sp_helprotect') would work wtih regardless of temp table or table variable.. in 2005..

is there a way to do it in one sentence like that in 2000...
0
 
chapmandewCommented:
I'd use temp tables.  :)
0
 
cyberkiwiCommented:
Sorry, was testing, this is the complete one including your @database_name variable

if object_id('tempdb..#test') is not null drop table #test;
declare @database_name varchaR(100) set @database_name = 'master'
declare @test table (owner sysname, object sysname, grantee sysname, grantor sysname, protecttype sysname, action sysname, [column] varchar(1000))
create table #test (owner sysname, object sysname, grantee sysname, grantor sysname, protecttype sysname, action sysname, [column] varchar(1000))
declare @sql varchar(1000)
set @sql = 'insert #test EXEC [' + @database_name +'].dbo.sp_helprotect'
exec(@sql)
insert @test select * from #test
select * from @test
0
 
cyberkiwiCommented:
> I'd use temp tables.  :)

Yes, so would I.. haha
0
 
anushahannaAuthor Commented:
Oh-- perfect..

so there are 2 limitations, actually?

the exec within the exec part...
and
table variable, too, right?
0
 
chapmandewCommented:
You can nest execs easily enough:  exec('exec(''exec sp_who2'')')

the problem was the table var in 2000
0
 
anushahannaAuthor Commented:
y'all excellent!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.