当前位置: 代码迷 >> Sql Server >> 求动态修改列tsql,该如何处理
  详细解决方案

求动态修改列tsql,该如何处理

热度:84   发布时间:2016-04-24 09:56:28.0
求动态修改列tsql
本帖最后由 iamsea22 于 2014-09-23 11:24:22 编辑
有100多张表,现在要求先判断此表如果有列类型为 decimal (18,2) 或者Float, 则修改为 decimal (24, 5) ,没有此类型的列的话,不更新。 求动态修改所有表的列的 tsql, 另外注意一张表有可能有多个列要改, 谢谢~
------解决思路----------------------
这是我当时用来动态修改每个表的排序规则的脚本,你改一下就可以用了
SELECT  'alter table ' + OBJECT_NAME(OBJECT_ID) + ' alter column ' + a.name
        + ' ' + b.name + '(' + CASE WHEN a.max_length = -1 THEN 'max'
                                    ELSE CONVERT(NVARCHAR(10), a.max_length)
                               END + ')'
        + '  Collate  SQL_Latin1_General_CP1_CI_AS'
FROM    sys.columns a
        INNER JOIN sys.types b ON a.system_type_id = b.system_type_id
WHERE   OBJECT_NAME(OBJECT_ID) NOT LIKE 'sys%'
        AND a.collation_name IS NOT NULL
        AND a.collation_name <> 'SQL_Latin1_General_CP1_CI_AS'
        AND a.system_type_id IN ( 167, 231, 239 )
        AND a.user_type_id = b.system_type_id
        AND b.user_type_id = b.system_type_id
ORDER BY a.NAME