SQL批量更新数据库中所有⽤户数据表中字段类型为tinyint为int --SQL批量更新数据库中所有⽤户数据表中字段类型为tinyint为int
--关键说明:
--1、从系统表syscolumns中的查询所有xtype='48'的记录得到类型为[tinyint]的字段
--2、更新字段类型前如果该字段有默认值索引则应先删除掉对应的索引
--3、数据表字段数据类型为tinyint在CodeSmith中读出来的是DbType.Byte类型,需要修正
declare @TableName nvarchar(250)
--声明读取数据库所有数据表名称游标mycursor1
declare mycursor1 cursor for select name from dbo.SysObjects WHERE OBJECTPROPERTY(ID, 'IsUserTable') = 1
--打开游标
open mycursor1
--从游标⾥取出数据赋值到我们刚才声明的数据表名变量中
fetch next from mycursor1 into @TableName
--如果游标执⾏成功
while (@@fetch_status=0)
begin
--定义游标中要修正的字段名变量
Declare @ColumnName nvarchar(255)
Declare @ColumnID int
--通过游标读取指定数据表的所有类型为tinyint的字段
--声明游标mycursor2
declare mycursor2 cursor for select name,colid from syscolumns Where ID=OBJECT_ID(@TableName) and xtype='48'  order by colid
--打开游标
open mycursor2
--从游标⾥取出数据赋值到我们刚才声明的字段名变量中
fetch next from mycursor2 into @ColumnName,@ColumnID
--如果游标执⾏成功
批量更新sql语句
while (@@fetch_status=0)
begin
--1、如果当前字段存在默认值索引则应先删除
IF  EXISTS (select * from sys.default_constraints where parent_object_id=OBJECT_ID(@TableName) and)
BEGIN
Declare @ConstraintName nvarchar(255)
select @ConstraintName=name from sys.default_constraints where parent_object_id=OBJECT_ID(@TableName) and
exec ('ALTER TABLE ['+@TableName+'] DROP CONSTRAINT ['+@ConstraintName+']')
END
--2、更新当前字段[tinyint]类型为[int]类型
exec ('ALTER TABLE ['+@TableName+'] ALTER COLUMN ['+@ColumnName+'] int')
--⽤游标去取下⼀条记录
fetch next from mycursor2 into @ColumnName,@ColumnID
end
--关闭游标
close mycursor2
--撤销游标
deallocate mycursor2
--⽤游标去取下⼀条记录
fetch next from mycursor1 into @TableName
end
--关闭游标
close mycursor1
--撤销游标
deallocate mycursor1

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。