取表中非空列
最近在做用友U8的项目,U8中的数据库表字段太多,有的时候只需要知道非空列的值,所以就写了一下的一个方法,取得非空列
1
declare @HeadTaleName nvarchar(50)2
declare @codeColName nvarchar(50)3
declare @codeColValue nvarchar(50)4

5
set @HeadTaleName = 'zpurRkdHead'6
set @codeColName = 'ccode'7
set @codeColValue = '0000000077'8

9
declare @cColumnName nvarchar(50) 10
declare @cColumnsNotNULL nvarchar(1000)11
declare @i int12
declare @count int13
declare @temp nvarchar(50)14
declare @sqls nvarchar(4000)15

16
set @cColumnName = ''17
set @cColumnsNotNULL =''18
set @temp = ''19
set @i = 020
set @count = 021

22
declare mycursor cursor for select name from syscolumns where id = object_id(@HeadTaleName) --为所获得的数据集指定游标23
open mycursor --打开游标24
fetch next from mycursor into @cColumnName --开始抓第一条数据25
while(@@fetch_status=0) --如果数据集里一直有数据26
begin 27
set @sqls = 'select @temp = '+ @cColumnName + ' from ' + @HeadTaleName + ' where ' + @codeColName + '= ' + @codeColValue28
exec sp_executesql @sqls,N'@temp nvarchar(50) output', @temp output29
if(@temp is not null)30
begin31
set @cColumnsNotNULL =@cColumnsNotNULL + @cColumnName + ','32
set @i = @i + 133
end34
fetch next from mycursor into @cColumnName --跳到下一条数据35
end36
set @cColumnsNotNULL = @cColumnsNotNULL + ','---如果 expression 的数据类型为 varchar(max)、nvarchar(max) 或 varbinary(max),则为 bigint;否则为 int。37
set @cColumnsNotNULL = substring(@cColumnsNotNULL,0,len(@cColumnsNotNULL)-1)38
close mycursor --关闭游标39
deallocate mycursor --删除游标40

41
select @i, @cColumnsNotNULL42

43
set @sqls = 'select ' + @cColumnsNotNULL +' from '+ @HeadTaleName + ' where ' + @codeColName + '= ' + @codeColValue44
exec(@sqls)45

浙公网安备 33010602011771号