全局修改数据库字段类型

news/2025/2/26 19:54:09
create   PROC  p_typeTotype
@type   tinyint = 0 ,   -- 修改方式,0=仅查询可修改情况,1=仅所有列可修改时才修改,2=修改可修改列,报告不可修改列
@typefrom   nvarchar ( 50 ),
@typeto   nvarchar ( 50 )
AS
SET  NOCOUNT  ON
-- 查询非unicode列转换为unicode列的可行性
SELECT  TableName = o.name,FieldName = c.name,
    CurrentFieldType
= t.name + N ' ( ' + CAST (c.prec  as   varchar ) + N ' ) '
        
+ CASE   WHEN  c.isnullable = 1   THEN  N ''   ELSE  N '  NOT '   END
        
+ N '  NULL ' ,
    NoChangeCause
= CAST ( STUFF (
        
CASE   WHEN   COLUMNPROPERTY (c.id,c.name,N ' IsComputed ' ) = 1
            
THEN  N ' ,计算列 '   ELSE  N ''   END
        
+ CASE   WHEN  c.cdefault = 0   THEN  N ''   ELSE  N ' ,列具有默认值 '   END
        
+ CASE   WHEN   EXISTS (
                
SELECT   *   FROM  sysindexkeys idxk,sysindexes idx
                
WHERE  idxk.id = c.id 
                    
AND  idxk.colid = c.colid
                    
AND  idxk.id = idx.id
                    
AND  idxk.indid = idx.indid
                    
AND  idx.indid  NOT   IN ( 0 , 255 )
                    
AND   INDEXPROPERTY (idx.id,idx.name,N ' IsAutoStatistics ' ) = 0 )
            
THEN  N ' ,列被主键、唯一键、索引、STATISTICS引用 '   ELSE  N ''   END
        
+ CASE   WHEN   EXISTS (
                
SELECT   *   FROM  sysforeignkeys  WHERE  fkeyid = c.id  AND  fkey = c.colid)
            
THEN  N ' ,列被外键约束引用 '   ELSE  N ''   END
        
+ CASE   WHEN   EXISTS (
                
SELECT   *   FROM  sysobjects oc,sysdepends d
                
WHERE  oc.parent_obj = o.id
                    
AND   OBJECTPROPERTY (oc.id,N ' IsCheckCnst ' ) = 1
                    
AND  d.id = oc.id
                    
AND  d.depnumber = c.colid)
            
THEN  N ' ,列被CHECK约束引用 '   ELSE  N ''   END , 1 , 1 ,N '' as   nvarchar ( 4000 ))
INTO  #  FROM  sysobjects o,syscolumns c,systypes t
WHERE  o.id = c.id  and  o.status >= 0
    
AND   OBJECTPROPERTY (o.id,N ' IsUserTable ' ) = 1
    
AND  t.xusertype = c.xusertype
    
AND  t.name  in ( @typefrom )
IF   @@ROWCOUNT = 0   RETURN

-- 如果需要,修改非unicode列为unicode列
IF   @type = 2   OR   NOT   EXISTS ( SELECT   *   FROM  #  WHERE  NoChangeCause > '' )
BEGIN
    
SET  XACT_ABORT  ON
    
BEGIN   TRAN
        
DECLARE  tb  CURSOR  LOCAL
        
FOR
        
SELECT  N ' ALTER TABLE  ' + QUOTENAME (TableName)
            
+ N '  ALTER COLUMN  ' + QUOTENAME (FieldName)
            
+   @typeto
        
FROM  #
        
WHERE  NoChangeCause  IS   NULL
        
DECLARE   @sql   nvarchar ( 4000 )
        
OPEN  tb
        
FETCH  tb  INTO   @sql
        
WHILE   @@FETCH_STATUS = 0
        
BEGIN
            
EXEC  sp_executesql  @sql
            
FETCH  tb  INTO   @sql
        
END
        
CLOSE  tb
        
DEALLOCATE  tb
    
COMMIT   TRAN
END

-- 显示不能修改的列
SELECT  TableName,FieldName,CurrentFieldType,
    NoChangeCause
= ISNULL (NoChangeCause,N ' 可以修改(或者已经修改成功) ' )
FROM  #
ORDER   BY   CASE   WHEN  NoChangeCause  IS   NULL   THEN   1   ELSE   0   END ,TableName

GO

转载于:https://www.cnblogs.com/kasafuma/archive/2007/12/29/1019388.html


http://www.niftyadmin.cn/n/972026.html

相关文章

PythonNote025---conda创建python虚拟环境

Intro 有些情况下,需要用到特殊版本的package,我们可以通过创建虚拟环境的方式定制一个版本供某一个项目使用,保证环境的相对独立性。另一方面,如果我们在集群上执行python任务,虚拟环境的方式可以避免在所有节点都安装…

PysparkNote101---DataFrame行转列

sql里经常会遇到行转列or列转行,如果数据框为{“A”,[1,2])},需要行转列为{(“A”,1),(“B”,2)}。话不多说,直接看代码。 import pyspark.sql.functions as F from pyspark.sql import SparkSession # 创建SparkSession对象,调用…

Docker(一):入门教程

2013年发布至今, Docker 一直广受瞩目,被认为可能会改变软件行业。 但是,许多人并不清楚 Docker 到底是什么,要解决什么问题,好处又在哪里?本文就来详细解释,帮助大家理解它,还带有简…

关于某些流负载技术

loadbandwith可以单独使用,用来静态指定接口的带宽负载,按照指定的比例进行等值ECMP路径分流RCR本地模式,支持动态调整,但是必须要依靠netstream的检查,周期性进行的,outbound方向的流,以及必须…

(转)linux内核虚拟文件系统浅析【转】

转自:https://www.cnblogs.com/woainilsr/p/3590716.html 转自http://hi.baidu.com/_kouu/item/4e9db87580328244ef1e53d0 ###### 虚拟文件系统(VFS)在我看来, "虚拟"二字主要有两层含义:1, 在同一个目录结构中, 可以挂载着若干种不同的文件系统. VFS隐藏…

Internal .Net Framework Data Provider error 6

在使用SQL Server 2005的database mirroring功能时遇到了Internal .Net Framework Data Provider error 6这个错误,发现没法立刻解决了,看完了KB article 944099后才知道要去自己去找ms的support要一个更新。至少到目前为止是这样的,遇到这个…

Spark001---yarn批量kill任务

— 删除所有ACCEPTED任务 for i in yarn application -list | grep -w ACCEPTED | awk {print $1} | grep application_; do yarn application -kill $i; done — 删除所有RUNNING任务 for i in yarn application -list | grep -w RUNNING | awk {print $1} | grep application…

Linux Core Dump【转】

转自:https://www.cnblogs.com/hazir/p/linxu_core_dump.html 当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”)。我…