查找Table中的单个列长度并判断是否属于改表(存储过程)

原创 2004年08月21日 19:51:00

   做程序有时候,要判断某列是否属于操作表,对比有些烦就写了一个存储过程。

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

--程序员 2004-08-21晚

哈希表查找 — 拉链法

散列表(也叫哈希表),是根据关键字值而直接进行访问的数据结构。 本文采用除留余数法构造散列函数。 本文采用拉链法处理冲突。 根据原始数组建立一个哈希表,哈希表为一个链表(一定要区分数组和链表),且要求...
  • learn_sunzhuli
  • learn_sunzhuli
  • 2015年07月26日 17:33
  • 2675

数据结构中的查找算法-动态查找表(2)

1,二叉排序树: 2,平衡二叉树: 3,B-和B+树:
  • yychenxie21
  • yychenxie21
  • 2015年09月06日 17:46
  • 1454

哈希表(等概率情况下)查找成功与查找不成功的平均查找长度

继续小结,做到一道求 哈希表查找成功与查找不成功 情况下平均查找长度的计算问题,迷惑了好一会,在这里总结下来:   首先,你要明白的是平均查找长度求的是期望,那么你就按照求期望的方法来求平均查找长度...
  • jiary5201314
  • jiary5201314
  • 2016年04月13日 13:45
  • 9319

Sqlite中判断表、字段是否存在的方法

Sqlite中判断表、字段是否存在的方法 标签: sqliteandroid判定是否存在某字段 2014-12-24 16:25 1158人阅读 评论(0) 收藏 举报  分...
  • linuxheik
  • linuxheik
  • 2017年01月20日 11:33
  • 558

哈希表中线性探测再散列法及等概率条件下平均查找长度

最近复习了下数据结构中的哈希表,发现在计算等概率情况下查找不成功的平均查找长度时比较迷茫,不知道到底是怎么计算出来的。现在通过查阅资料终于知道如何计算了,所以记录下来以供以后查阅。   下面看下201...
  • shangruo
  • shangruo
  • 2013年01月10日 22:42
  • 17870

Mysql检查列是否存在并新增、修改、删除列

在MYSQL中,新增、修改、删除列时不能进行IF EXISTS判断,IF语句只能出现在存储过程当中,故博主用存储过程的方法新增、修改、删除列,修改列名称。 DROP PROCEDURE IF EXIS...
  • huangjin0507
  • huangjin0507
  • 2015年10月22日 10:56
  • 5146

用SQL语句获得一个存储过程返回的表

定义一个存储过程如下: create proc [dbo].[test1] @id int as select 1 as id,'abc' as name union all  select...
  • studyzy
  • studyzy
  • 2013年09月10日 14:19
  • 5570

Oracle存储过程中如何根据指定的参数判断该参数的值否存在数据表中:

摘要:最近项目中用到了Oracle存储过程,所以就自己尝试着写了
  • sxdtzhaoxinguo
  • sxdtzhaoxinguo
  • 2014年10月17日 12:46
  • 2632

oracle 存储过程返回 结果集 table形式 (使用sys_refcursor 及程序包package 两种方式)

1.创建一个表Test用来测试.CREATE TABLE "TEST" ( "AAA" NUMBER(*,0), "BBB" VARCHAR2(10 BYTE) )2.向Test表...
  • cherish1forever
  • cherish1forever
  • 2015年11月27日 12:01
  • 5097

2014秋C++第19周 补充代码 哈希法的存储与查找

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。 这段...
  • sxhelijian
  • sxhelijian
  • 2015年01月07日 21:16
  • 1964
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:查找Table中的单个列长度并判断是否属于改表(存储过程)
举报原因:
原因补充:

(最多只允许输入30个字)