|
可能没有说清楚。不过现在编完了,我就把代码和运行结果全写出来,请各位指教。
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
|