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