热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

sql编程存储过程之动态添加数据库表列并更新数据库表数据

CREATEPROCEDUREdbo.UpdateBrowserDatabrowserTypenvarchar(200),--定义须查询的字符串(浏览器类型ÿ

CREATE PROCEDURE  dbo.UpdateBrowserData
   @browserType  nvarchar(200), --定义须查询的字符串  (浏览器类型)

   @counter nvarchar(200), --定义须查询的字符串  (浏览器计数)
   @webSite nvarchar(50)
as
declare @type nvarchar(20) --
截取出来的浏览器类型
declare @count nvarchar(20) --截取出来的浏览器计数

declare @browPos int  --定义分隔符','的位置  (针对浏览器类型截取来用的)
declare @browLen int  --定义截取出来的子字符串的长度  (针对浏览器类型截取来用的)

declare @countPos int  --定义分隔符','的位置 (针对浏览器计数来用的) 
declare @countLen int  --定义截取出来的子字符串的长度 (针对浏览器计数来用的)

declare @sql nvarchar(500) --拼接执行更新的sql命令

declare @sqlAlter nvarchar(200) --拼接执行修改的sql命令
set @browPos=Charindex(',',@browserType,0) --Charindex(分隔符,被查询的字符串,查询起始位置),这里是取分隔符','出现的位置    
set @countPos=Charindex(',',@counter,0)
set @sql = 'update [tbTest] set '   --初始值

set @sqlAlter ='Alter Table [tbTest] add ' -- 初始值

while(@browPos>0) 

begin 
    set @type=Substring(@browserType,0,@browPos) --Substring(被查询的字符串,起始位置,截止位置),根据分隔符的位置截取字符串
 
    set @count= Substring(@counter,0,@countPos)
    set @browLen=len(@type)  --len(子字符串),取得子字符串的长度
  
    set @countLen=Len(@count)  
    set @browserType=Stuff(@browserType,1,@browLen+1,'') --Stuff(被查询的字符串,起始位置,截止位置),把子字符串从被查询的字符串中去除
 
    set @counter=Stuff(@counter,1,@countLen+1,'')
    set @countPos=Charindex(',',@counter,0)

    IF Not Exists(select * from syscolumns where [name]= @type   --判断需要添加的列是否已经存在
       and OBJECTPROPERTY(id,'IsUserTable')=1 and object_name(id)='tbTest')
        begin
         set @sqlAlter = @sqlAlter+'['+@type+']'+'nvarchar(50) default('''')'
         print @sqlAlter --
测试用
         exec(@sqlAlter) -- 执行修改表结构的Sql语句
        end 
if(@countPos = 0)
            begin
                set @sql = @sql + '['+ @type +']'+'='+ @count + '' --
拼接字符串
            end
        else
            begin
                 set @sql = @sql + '['+ @type +']'+'='+ @count+ ',' --
拼接字符串
            end
    set @browPos=Charindex(',',@browserType,0)   --
控制循环的条件   
    print @browPos
end
    set @sql = @sql +'where [website] ='+''''+ @webSite+''''
    print @sql--测试用

    exec(@sql)--执行更新语句
go

--存储过程  执行说明:   浏览器类型和  该浏览器对网站的访问次数需一一对应,传入字符串结尾必须是逗号,参数三是要检测的网站,属于基础数据
exec  UpdateBrowserData  'IE6,IE7,IE8,IE9,IE10,IE11,IE12,IE13,', '2,3,4,5,5,6,0,3,', 'baidu'

drop  proc  UpdateBrowserData --删除存储过程

数据表如图:

--删除默认约束
alter table [tbTest] DROP CONSTRAINT  DF__tbTest__@type__25869641

--删除字段
IF Exists(select * from syscolumns where [name]='IE13'
and OBJECTPROPERTY(id,'IsUserTable')=1 and object_name(id)='tbTest')
begin
Alter Table [tbTest] drop  COLUMN  [@type]
end


推荐阅读
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 开发笔记:select from具体执行相关知识介绍及案例分析
    本文由编程笔记小编整理,主要介绍了select from具体执行相关的知识,包括数据插入、查询最小rowID、查询每个重复名字的最小rowID、删除重复数据等操作,并提供了案例分析。希望对读者有一定的参考价值。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
author-avatar
听海哭的声音_thesee_338
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有