做程序有時候,要判斷某列是否屬于操作表,對比有些煩就寫了一個存儲過程。
create proc Pr_getTableColumnLen ( --傳入的表名和列名 @inTableName varchar(20), @inColumnName varchar(20),
--傳入的標志變量和內容變量 @lenContent varchar(200), @flag varchar(1) )
as
--內部變量 declare @rColumnName varchar(20), @rColumnType varchar(10), @rColumnByte int, @rColumnNullStatus varchar(1), @rTemp varchar(10), @rTempStr varchar(100)
--start1 --如果存在判斷存入數據是否合格 --查找當前列,是否存在 SELECT @rTemp=len(COLUMNPROPERTY( OBJECT_ID(@inTableName),@inColumnName,'PRECISION')) if(@rTemp > 0) begin select @rColumnName=a.name from syscolumns a,systypes b where a.id =object_id(@inTableName) and a.xtype = b.xtype and a.name=@inColumnName select @rColumnNullStatus=case a.isnullable when 1 then 'Y' else 'N' end from syscolumns a,systypes b where a.id =object_id('publicnotice') and a.xtype = b.xtype and a.name=@inColumnName select @rColumnType=b.name from syscolumns a,systypes b where a.id =object_id(@inTableName) and a.xtype = b.xtype and a.name=@inColumnName select @rColumnByte=a.length from syscolumns a,systypes b where a.id =object_id(@inTableName) and a.xtype = b.xtype and a.name=@inColumnName --‘H’是中文判斷 if(upper(@flag) ='H') begin if(len(@lenContent) > @rColumnByte/2) begin set @rTempStr = ('出錯提示:列('+ @rColumnName + ') 類型是 ' + @rColumnType + ' 可存儲(' + cast(@rColumnByte/2 as varchar(10)) + ')個漢字' + ' 可否為空 ' + @rColumnNullStatus) end else begin set @rTempStr = 'Y' end end else --其他默認為英文 begin if(len(@lenContent) > @rColumnByte) begin set @rTempStr = ('出錯提示:列('+ @rColumnName + ') 類型是(' + @rColumnType + ') 可存儲(' + cast(@rColumnByte as varchar(10)) + ')個字符' + ' 可否為空(' + @rColumnNullStatus + ')') end else begin set @rTempStr = 'Y' end end end else begin set @rTempStr =( '(' + @inColumnName + ') 是無效列') end
--start1End
--start2,用臨時表得到數據 create table #temTable (result varchar(100)) insert into #temTable values(@rTempStr) select * from #temTable
--start2End
|