0

How use a #temp inside a parenthesis?

Or how to use a table variable inside a parenthesis?

Clearly the real query is much more complex.

Fails:

IF OBJECT_ID(N'tempdb..#Temp', N'U') IS NOT NULL DROP TABLE #Temp 
CREATE TABLE #Temp (sID int NOT NULL);
select count(*) 
from 
(
  insert into #Temp 
  select top 10 sID from [docSVsys]  
  select * from #temp
) as [count] 
IF OBJECT_ID(N'tempdb..#Temp', N'U') IS NOT NULL DROP TABLE #Temp

Fails:

select count(*) 
from 
(
  IF OBJECT_ID(N'tempdb..#Temp', N'U') IS NOT NULL DROP TABLE #Temp 
  CREATE TABLE #Temp (sID int NOT NULL);
  insert into #Temp 
  select top 10 sID from [docSVsys]  
  select * from #temp
) as [count] 
IF OBJECT_ID(N'tempdb..#Temp', N'U') IS NOT NULL DROP TABLE #Temp

Works:
But I need to use the #temp inside a parenthesis

IF OBJECT_ID(N'tempdb..#Temp', N'U') IS NOT NULL DROP TABLE #Temp 
CREATE TABLE #Temp (sID int NOT NULL);
insert into #Temp 
select top 10 sID from [docSVsys]  
select * from #temp
IF OBJECT_ID(N'tempdb..#Temp', N'U') IS NOT NULL DROP TABLE #Temp 
paparazzo
  • 44,497
  • 23
  • 105
  • 176

1 Answers1

1

You can use only SELECT statements in parenthesis (subquery). But you can not use INSERT statement here (#-table does not matter). Try

IF OBJECT_ID(N'tempdb..#Temp', N'U') IS NOT NULL DROP TABLE #Temp 
CREATE TABLE #Temp (sID int NOT NULL);

insert into #Temp 
select top 10 sID from [docSVsys];

select count(*) 
from 
(
  select * from #temp
) as [count] 
IF OBJECT_ID(N'tempdb..#Temp', N'U') IS NOT NULL DROP TABLE #Temp

Or use OUTPUT clause for complex case

Alexander Sigachov
  • 1,541
  • 11
  • 16
  • Thanks worked. Don't think output is I need for this. Populating that #temp is expensive and then it is reused in some joins and unions to get "results". – paparazzo Jun 14 '13 at 14:38