January 21, 2008 at 8:58 am
soon I will have no hair left to tear out and for me just hitting middle age thats not good
the following code fails when it says must declare the @tbl variable within the nested cursor
help !! please
simon
--
DECLARE @TBL varchar(32),
@SQLSTR VARCHAR (1000),
@ctrl CHAR (2),
@person_code varchar(15),
@ID varCHAR (10),
@max_no varchar(3),
@report_code varchar(3)
SET @ctrl = CHAR (13) + CHAR (10)
set @person_code = '1'
set @ID = '997'
create table #temp_number
(table_name varchar (50),
report_code varchar (10),
REPORT_NO varchar (10)
)
DECLARE TBLCUR CURSOR FOR
select distinct table_name
from information_schema.columns where column_name = 'REPORT_NO'
order by 1
OPEN TBLCUR
FETCH NEXT FROM TBLCUR INTO @TBL
WHILE @@FETCH_STATUS = 0
BEGIN
declare value cursor for
select report_code, max(REPORT_NO)
from @TBL
where person_code = @person_code
and ID = @ID
--
OPEN value
--
FETCH NEXT FROM value INTO @report_code,@values
--
WHILE @@FETCH_STATUS = 0
BEGIN
insert #temp_number (table_name)
values (@tbl)
update #temp_number
set REPORT_NO = @values,
report_code = @report_code
where table_name = @tbl
FETCH NEXT FROM value INTO @report_code,@values
end
CLOSE value
DEALLOCATE value
FETCH NEXT FROM TBLCUR INTO @TBL
end
CLOSE TBLCUR
DEALLOCATE TBLCUR
go
DROP TABLE #temp_number
January 21, 2008 at 9:22 am
I'm not 100% sure, but it's possible that you can't open two cursors on a table variable.There might be some scope issue here.
Any reason not to move this to a temp table and use that?
January 21, 2008 at 9:28 am
Steve Jones - Editor (1/21/2008)
I'm not 100% sure, but it's possible that you can't open two cursors on a table variable.There might be some scope issue here.Any reason not to move this to a temp table and use that?
changed #temp_number to temp_number , still get
Server: Msg 137, Level 15, State 2, Line 42
Must declare the variable '@TBL'.
Server: Msg 137, Level 15, State 1, Line 47
Must declare the variable '@values'.
weeps 🙁
si
January 21, 2008 at 9:37 am
You're declaring @TBL as a varchar, then trying to select from it. You can't select from a varchar variable.
Either @TBL needs to be declared as variable type "table", and your first cursor needs to be re-written to insert into that table, or the second cursor needs to be rewritten to select differently.
- Gus "GSquared", RSVP, OODA, MAP, NMVP, FAQ, SAT, SQL, DNA, RNA, UOI, IOU, AM, PM, AD, BC, BCE, USA, UN, CF, ROFL, LOL, ETC
Property of The Thread
"Nobody knows the age of the human race, but everyone agrees it's old enough to know better." - Anon
January 21, 2008 at 9:47 am
From what I can see, you'll need to use some dynamic SQL to select from @TBL.
Try replacing this
declare value cursor for
select report_code, max(REPORT_NO)
from @TBL
where person_code = @person_code
and ID = @ID
with this
declare @SQL nvarchar(4000)
set @SQL=N'declare value cursor for
select report_code, max(REPORT_NO)
from '+@TBL+'
where person_code = @person_code
and ID = @ID '
execute sp_executesql
@SQL,
N'@person_code varchar(15),@ID varchar (10)',
@person_code = @person_code,
@ID = @ID
____________________________________________________
Deja View - The strange feeling that somewhere, sometime you've optimised this query before
How to get the best help on a forum
http://www.sqlservercentral.com/articles/Best+Practices/61537Viewing 5 posts - 1 through 4 (of 4 total)
You must be logged in to reply to this topic. Login to reply