select @SQL=@SQL + ' select ''' + name + ''' as 表名,(select count(*) from ' + name + ') as 数量 union' from sysobjects where type='U'这里是通过sysobjects系统表,因为系统表里的用户表的列为type,'U'表示用户,所以这句动态语句就是用来统计表的数量和用户
因为语句是根据系统表来循环生成的,所以尾句上会存在一个union,所以必须去掉才能执行!

解决方案 »

  1.   

    我想知道select count(*) from ' + name + 'from sysobjects where type='U'这句话我单独取出来怎么不好用?select ''' + name from sysobjects where type='U'这句话我单独取出来用就好用
      

  2.   

    能不能在详细的说明一下
    为什么' select ''' + name + ''' as 表名,select前面为什么要有空格
    为什么select count(*) from ' + name + ') 这句话为什么要这么取
    set @SQL=@SQL + left(@SQL,len(@SQL)-len('union'))这句话有什么作用
    里面的left(@SQL,len(@SQL)-len('union'))去出的结果是什么,怎么知道要取这句话
      

  3.   

    我想知道select count(*) from ' + name + 'from sysobjects where type='U'这句话我单独取出来怎么不好用?
    这句话明显是错误的,sql没有这样的语法
    能不能在详细的说明一下
    为什么' select ''' + name + ''' as 表名,select前面为什么要有空格--
    这个你要看清楚了,前面还有一个变量@sql,select前面的空格是为了和前面的语句作隔断select @SQL=@SQL + ' select ''' + name 为什么select count(*) from ' + name + ') 这句话为什么要这么取
    -----
    这句话是为了count数量,含义就是我选了一个tablename,然后通过
    select count(*) from tablename 可以统计每个表的纪录数,如果我要循环取这些表,需要将tablenam换为一个可循环的变量,就是如上的name
    set @SQL=@SQL + left(@SQL,len(@SQL)-len('union'))这句话有什么作用
    --
    这个你在可以自己做实验
    select @sql
    set @SQL=@SQL + left(@SQL,len(@SQL)-len('union'))
    select @sql--回显一下@sql的值,你就知道怎么变化的了里面的left(@SQL,len(@SQL)-len('union'))去出的结果是什么,怎么知道要取这句话
      

  4.   

    借助于一个未公开的存储过程: sp_MSforeachtable  可以作到。例如大概象这个样子:EXEC sp_MSforeachtable @command1="print '?'",
             @command2="sp_spaceused '?'",
             @command3= "SELECT count(*) FROM ? "你的这句:
    我想知道select count(*) from ' + name + 'from sysobjects where type='U'这句话我单独取出来怎么不好用?
    得不到想要的东西,因为你打开 sysobjects 表看看就知道了 
      

  5.   

    还有个问题
    exec (@SQL)是什么意思??
      

  6.   

    exec (@SQL)是执行整个循环过程还是某一小段?
      

  7.   

    exec (@SQL)就是执行你上面所生成的语句。