ITPUB??ì3
报名申请微软有影响力专家
ITPUB论坛 » MS SQL Server » 想写一个分析表的存储过程

标题: 想写一个分析表的存储过程
离线 ArrayJewff
初级会员



精华贴数 0
个人空间 0
技术积分 28 (43082)
社区积分 0 (72846)
注册日期 2002-11-22
论坛徽章:0
      
      

发表于 2002-11-29 18:18 
想写一个分析表的存储过程

想写一个存储过程,参数是数据库和表的名字,然后分析给定表的各个字段的属性,这些我做到了。
然后我还想分析各个字段在表里空值占的比率等参数,想用的办法是用exec执行根据列名和表名生成的动态sql语句。
列名是根据表名从syscolumns表里得到的,这样可以自动遍历每一个列。
这时候我就想不出办法把得到的数值通过变量传递回来了。用全局变量高不定,用临时表存储变量又有点麻烦。
请高手给一个思路。

要是有现成的这样的程序和软件,也请介绍给我。
谢谢谢谢。




只看该作者    顶部
离线 jgh96479
中级会员



精华贴数 0
个人空间 0
技术积分 254 (7929)
社区积分 0 (68765)
注册日期 2002-10-6
论坛徽章:0
      
      

发表于 2002-12-1 21:58 
好象用不到呀!

我还具体搞不清楚你到底怎么作的,但是知道你想干什么了,那为什么要用什么变量传递呢?我觉得直接可以能写出来呀!不是很困难!


__________________
我飞舞在数码世界里
只看该作者    顶部
离线 Jewff
初级会员



精华贴数 0
个人空间 0
技术积分 28 (43082)
社区积分 0 (72846)
注册日期 2002-11-22
论坛徽章:0
      
      

发表于 2002-12-2 10:12 
可能没有说清楚。不过现在编完了,我就把代码和运行结果全写出来,请各位指教。
CREATE PROCEDURE zp_columns(
        @tbname sysname = 'master..sysobject'
)
AS
declare @sql varchar(5000)
declare @colname sysname
declare @collen int
declare @coltype varchar(128)
declare @colnullable int

declare cur scroll cursor
        for
        select c.name,x.name,c.length,isnullable
        from syscolumns c join systypes x
        on c.xtype = x.xtype
        where id = object_id(@tbname)
        and x.name<>'sysname'

print ' table   ------ ' + UPPER(@tbname) +' ------  ( '+convert(varchar,getdate())+' )'
open cur
fetch cur
print @@fetch_status
while @@fetch_status = 0
begin
fetch next from cur into @colname,@coltype,@collen,@colnullable
set @sql =
        ' declare @total float'        +
        ' declare @nul float'+
        ' declare @nulrate float '+
        'select @total=count(*) from '        +
        @tbname+
        ' select @nul=count(*) from '+
        @tbname+
        ' where ['+
        @colname+
        '] is null or len(convert(varchar,['+
        @colname+
        ']))= 0
        set @nulrate = @nul/@total*100
       
        print '+
        case @colnullable                -- IS NULLable ?
        when 0 then '''*''+'                -- ' * ' means can not be null
        else '''-''+'
        end
        +'cast('''+@colname+'''as char(20)) + '+
        +''''+cast(@coltype AS char(10))+'('+cast(@collen AS char(5))+')   '' +'+
        'cast(@nul as char(7))+'' N from ''        +
        cast(@total as char(7)) +
        '', N rate  [ ''+cast( @nulrate as char(10))+
        '' %]'''
--print @sql

exec(@sql)
end

close cur
deallocate cur
GO

运行结果:
table   ------ JKCAT ------  ( 12  2 2002 10:09AM )

(1 row(s) affected)

0
*JKid                varchar   (30   )   0       N from 343334 , N rate  [ 0          %]
-PackNr              int       (4    )   0       N from 343334 , N rate  [ 0          %]
-Quantity            float     (8    )   0       N from 343334 , N rate  [ 0          %]
-Unit                varchar   (10   )   181     N from 343334 , N rate  [ 0.0527183  %]
-Currency            varchar   (10   )   53857   N from 343334 , N rate  [ 15.6865    %]
-ListPrice           money     (8    )   0       N from 343334 , N rate  [ 0          %]
-OriginalPrice       money     (8    )   0       N from 343334 , N rate  [ 0          %]
-QuotePrice          money     (8    )   0       N from 343334 , N rate  [ 0          %]
-Discontinued        varchar   (5    )   343334  N from 343334 , N rate  [ 100        %]
-Note                varchar   (20   )   0       N from 343334 , N rate  [ 0          %]
-Note                varchar   (20   )   0       N from 343334 , N rate  [ 0          %]
Stored Procedure: zcl_mess.dbo.zp_columns
        Return Code = 0


只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰网域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:060528号 联系我们 法律顾问