Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
Author |
Topic |
Samadhi69
Starting Member
20 Posts |
Posted - 2009-02-04 : 15:05:28
|
I want to get the number of records in a particular set of views on a database.* I do not have access to the tables these views are based on so some code I have found for getting counts of tables is not an option. I have a table with the view names I want to get counts for and a column I would like to update with those counts. Here is my first attempt:declare @table varchar(50) --table namedeclare @count int(10) --table countdeclare cc_cursor cursor forselect table_namefrom table_countsopen cc_cursorfetch next from cc_cursor into @tablewhile @@fetch_status = 0begin set @count = (select count(*) from @table) update table_counts set numrecords = @count fetch next from cc_cursor into @tableendclose cc_cursordeallocate cc_cursor I get the error "Must declare the variable '@table'. If anyone knows a way around this, or a better way to do this, I would appreciate it.*If you really want to know why, I'll answer but trust me it will be a time saver.If con is the opposite of pro, what's the opposite of progress? |
|
sakets_2000
Master Smack Fu Yak Hacker
1472 Posts |
Posted - 2009-02-04 : 15:31:52
|
Not sure why you were updating all rows in table_counts with the count returned. I made a small change there too.declare @table varchar(50) --table namedeclare @count int --table countdeclare cc_cursor cursor forselect table_namefrom table_countsopen cc_cursorfetch next from cc_cursor into @tablewhile @@fetch_status = 0begin exec (' declare @count int --table count select @count=count(*) from '+@table+' ; update table_counts set numrecords = @count where table_name='''+@table+'''') fetch next from cc_cursor into @tableendclose cc_cursordeallocate cc_cursor |
|
|
sakets_2000
Master Smack Fu Yak Hacker
1472 Posts |
Posted - 2009-02-04 : 15:35:58
|
rather use this,declare @table varchar(50) --table namedeclare cc_cursor cursor forselect table_namefrom table_countsopen cc_cursorfetch next from cc_cursor into @tablewhile @@fetch_status = 0begin exec (' update table_counts set numrecords = (select count(*) from '+@table+') where table_name='''+@table+'''') fetch next from cc_cursor into @tableendclose cc_cursordeallocate cc_cursor |
|
|
Samadhi69
Starting Member
20 Posts |
Posted - 2009-02-04 : 15:50:50
|
Thanks that worked perfectly. I'll have to read up on the exec command, I haven't used it much.quote: Not sure why you were updating all rows in table_counts with the count returned.
Because there are hundreds of views. Essentially, if the count is below a certain level I'm not going to worry about making it more efficient. If however, as is the with maybe 10% of them, the view has over a million records I want to only grab new data. This will take custom code for each table (determining which column, if any, is updated with a change date) so I want to do as few as possible. With all of the counts in a table, it's easy to check.If con is the opposite of pro, what's the opposite of progress? |
|
|
|
|
|
|
|