经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
将数据库某种类型的字段更新为另一种类型
来源:cnblogs  作者:张占岭  时间:2019/7/22 10:42:44  对本文有异议

有时,我们可能会遇到这样的情况,当我们数据表的float类型精度不够时,可能需要把它统一调整成decimal或者money,而这时你一个一个去修改可能会崩溃,因为你无法从几千张表里确实找到所有的float类型的字段,而这时我们就需要自动的,批量的去处理它们。

实现思路:从系统表中查询所有用户建立的表,然后查询指定类型的所有字段,最后使用alter table alter column去更新这个字段.

知识点

  1. 游标
  2. exec
  3. SYSOBJECTS表和SYSCOLUMNS表

常用类型的typeid值

  1. xtype= 35 'text'
  2. xtype=36 'uniqueidentifier'
  3. xtype=48 'tinyint'
  4. xtype=52 'smallint'
  5. xtype=56 'int'
  6. xtype=58 'smalldatetime'
  7. xtype=59 'real'
  8. xtype=60 'money'
  9. xtype=61 'datetime'
  10. xtype=62 'float'
  11. xtype=98 'sql_variant'
  12. xtype=99 'ntext'
  13. xtype=104 'bit'
  14. xtype=106 'decimal'
  15. xtype=108 'numeric'
  16. xtype=122 'smallmoney'
  17. xtype=127 'bigint'
  18. xtype=165 'varbinary'
  19. xtype=167 'varchar'
  20. xtype=173 'binary'
  21. xtype=175 'char'
  22. xtype=189 'timestamp'
  23. xtype=231 'nvarchar'
  24. xtype=239 'nchar'
  25. xtype=241 'xml'
  26. xtype=231 'sysname'

实现代码

  1. DECLARE @tableName varchar(256)
  2. DECLARE @columnName varchar(256)
  3. DECLARE cursor2 CURSOR
  4. FOR
  5. SELECT NAME FROM SYSOBJECTS WHERE TYPE='U'
  6. OPEN cursor2
  7. FETCH NEXT FROM cursor2 INTO @tableName
  8. WHILE @@fetch_status = 0
  9. BEGIN
  10. DECLARE cursor3 CURSOR
  11. FOR
  12. SELECT name FROM SYSCOLUMNS WHERE ID=OBJECT_ID(@tableName) and xtype=60
  13. OPEN cursor3
  14. FETCH NEXT FROM cursor3 INTO @columnName
  15. WHILE @@fetch_status = 0
  16. BEGIN
  17. print '更新表'+@tableName+',更新字段'+@columnName
  18. Exec('ALTER TABLE '+@tableName+' ALTER COLUMN '+@columnName+' [float] ')
  19. FETCH NEXT FROM cursor3 INTO @columnName
  20. END
  21. CLOSE cursor3
  22. DEALLOCATE cursor3
  23. FETCH NEXT FROM cursor2 INTO @tableName
  24. END
  25. CLOSE cursor2
  26. DEALLOCATE cursor2

原文链接:http://www.cnblogs.com/lori/p/11216913.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号