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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值