现在改成这样
if exists(select * from sysobjects where name = 'counttable') drop table counttable
create table counttable(tablename nvarchar(100),record int)
declare @tablename nvarchar(100)
declare @i int
declare @sql nvarchar(200)
declare detail cursor for select [name] from sysobjects where type='u'
open detail
fetch next from detail into @tablename
while @@fetch_status = 0
begin
  set @sql = 'select  @i = count(*) from '+ @tablename
  exec(@sql)
  insert into counttable(tablename,record) values(@tablename,@i)
  fetch next from detail into @tablename
end
close detail
deallocate detail
select * from counttable错误是:必须声明变量 '@i'。