批量修改数据库表字段类型
2011-06-01 13:15
459 查看
实际使用例子:
/*--将所需表的某特定数值类型批量转换为其他类型--*/
/*--调用示例:E1T04_1996 char(10)-转换为nvarchar(100) --*/
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
CREATE procedure [dbo].[p_set]
as
declare tb cursor for
SELECT sql='alter table ['+d.name+'] alter column ['+a.name+'] nvarchar'
+' (100)' FROM syscolumns a
left join systypes b on a.xtype=b.xusertype
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name='E1T04_1996' where b.name ='char' AND a.length='10'
declare @sql varchar(1000)
open tb
fetch next from tb into @sql
while @@fetch_status = 0
begin
exec(@sql)
fetch next from tb INTO @sql
end
close tb
deallocate tb
--
--DECLARE @sql VARCHAR(1000)
--select @sql='alter table ['+d.name+'] alter column ['+a.name+'] nvarchar'
-- +'(100)' FROM syscolumns a
-- left join systypes b on a.xtype=b.xusertype
-- inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name='E1T04_1996' where b.name ='char' AND a.length='10'
--
-- PRINT @sql
--------------------------------------------------------------------------------------
/*--将所需表的某特定数值类型批量转换为其他类型--*/
/*--调用示例:E1T04_1996 char(10)-转换为nvarchar(100) --*/
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
CREATE procedure [dbo].[p_set]
as
declare tb cursor for
SELECT sql='alter table ['+d.name+'] alter column ['+a.name+'] nvarchar'
+' (100)' FROM syscolumns a
left join systypes b on a.xtype=b.xusertype
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name='E1T04_1996' where b.name ='char' AND a.length='10'
declare @sql varchar(1000)
open tb
fetch next from tb into @sql
while @@fetch_status = 0
begin
exec(@sql)
fetch next from tb INTO @sql
end
close tb
deallocate tb
--
--DECLARE @sql VARCHAR(1000)
--select @sql='alter table ['+d.name+'] alter column ['+a.name+'] nvarchar'
-- +'(100)' FROM syscolumns a
-- left join systypes b on a.xtype=b.xusertype
-- inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name='E1T04_1996' where b.name ='char' AND a.length='10'
--
-- PRINT @sql
--------------------------------------------------------------------------------------
批量修改数据库表字段类型
2楼 zjcxc (邹建) 回复于 2004-08-11 21:13:16 得分 100 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_set]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[p_set] GO /*--将所有的表中,数值类型由char,varchar改为nchar,nvarchar --*/ /*--调用示例: exec p_set --*/ --修改的存储过程 create procedure p_set as declare tb cursor for SELECT sql='alter table ['+d.name +'] alter column ['+a.name+'] n' +b.name+'('+cast(a.length*2 as varchar)+')' FROM syscolumns a left join systypes b on a.xtype=b.xusertype inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties' where b.name in('char','varchar') and not exists(SELECT 1 FROM sysobjects where xtype='PK' and name in ( SELECT name FROM sysindexes WHERE indid in( SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid ))) --主键不能修改 order by d.name,a.name declare @sql varchar(1000) open tb fetch next from tb into @sql while @@fetch_status = 0 begin exec(@sql) fetch next from tb into @sql end close tb deallocate tb go ---------------------------------------------------------------------------------------------- 作者tag:数据库设计 批量更改某数据库中所有表中某字段的类型 批量更改某数据库中所有表中某字段的类型 -- ======================================================= -- 批量更改某数据库中所有表中某字段的类型 -- ======================================================= IF EXISTS ( SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE SPECIFIC_NAME = N'sp_AlterColumnType' ) DROP PROCEDURE sp_AlterColumnType GO CREATE PROCEDURE sp_AlterColumnType AS -- ============================================= -- 循环当前数据库中所有用户建的表 -- ============================================= DECLARE @TableName nvarchar(100) DECLARE @TableID nvarchar(100) DECLARE cursor_CustomTable CURSOR FOR SELECT [name],[ID] FROM sysobjects where type ='U' OPEN cursor_CustomTable FETCH NEXT FROM cursor_CustomTable INTO @TableName,@TableID WHILE @@FETCH_STATUS = 0 BEGIN -- ============================================= -- 循环当前表中所有列,取出列名和列的类型 -- ============================================= DECLARE @ColumnName nvarchar(100) DECLARE @ColumnType nvarchar(100) DECLARE cursor_Column CURSOR FOR select [name],xtype from syscolumns where [id] = @TableID and xtype=(select xtype from systypes where name='numeric') OPEN cursor_Column FETCH NEXT FROM cursor_Column INTO @ColumnName,@ColumnType WHILE @@FETCH_STATUS = 0 BEGIN --在此处修改列类型为numeric(14,2) exec('ALTER TABLE '+@TableName +' ALTER COLUMN '+@ColumnName +' numeric(14,2) null') FETCH NEXT FROM cursor_Column INTO @ColumnName,@ColumnType END CLOSE cursor_Column DEALLOCATE cursor_Column -- 循环到下一个表. FETCH NEXT FROM cursor_CustomTable INTO @TableName,@TableID END CLOSE cursor_CustomTable DEALLOCATE cursor_CustomTable GO |
相关文章推荐
- 批量修改数据库表字段类型
- 批量生成修改数据库表字段类型SQL脚本
- 批量修改数据库中字段的数据类型
- SQL SERVER 批量修改字段的数据类型
- 修改数据库表字段类型为clob时,报错:ORA-22858
- 修改表主键字段数据类型(up_ModifyPrimaryColumn)
- 根据字段关联批量修改关联数据
- sql 语句修改数据字段类型
- 批量修改主表和从表的关联字段数据
- Oracle中已有数据的字段类型修改
- 懒人懒到家 批量修改DB中字段类型
- mysql修改字段数据类型和名称
- 批量修改MySQL数据表字段内容
- Oracle 修改带数据的字段类型
- Oracle 修改带数据的字段类型
- SQL SERVER 2008数据库的表中修改字段的数据类型后,不能保存
- solrJ 1、批量更新数据时,会有部分数据没有更新上, 2.排序时使用整型、数字型字段,不要使用字符串类型
- oracl 修改已有数据的字段类型
- Oracle-不删表数据,修改字段类型
- 使用存储过程 修改符合条件的数据表的相关字段 的数据类型