我有一个smalldatetime列,需要将其更改为datetime列。这将是安装过程的一部分,因此它不能是手动过程。不幸的是,该列具有一些索引,并且对它的约束不是非null。索引与性能有关,仅需要使用新数据类型保留索引。是否可以写一条语句使我在保留相关信息的同时仍更改列数据类型?如果是这样,该怎么办?
您无法使用适当的索引,唯一约束,外键约束或检查约束将数据类型从smalldatetime更改为datetime。您必须先将它们全部删除,然后再更改类型。然后:
alter table T alter column TestDate datetime not null
然后重新创建仍然适用的约束和索引。
生成放置和创建的一些不同方法:
1)如果为所有索引和约束都指定了明确的名称,则安装程序可以在每种环境(开发,测试,用户接受测试,性能测试等,生产环境)中运行静态脚本。
要生成此显式脚本,您可以:a)使用SSMS(或与SQL Server
2000,企业管理器一起)编写create和drop语句的脚本。b)在您的源代码存储库中进行工作,以发现依赖对象的名称和定义,并将适当的静态脚本放在一起。c)尝试运行alter语句。看看它失败了。查找定义并手写放置并创建。(个人而言,这对于编写drop非常有用,而不是那么擅长创建。)
2)如果未为所有索引和约束都指定显式名称,则安装程序将必须在数据字典中查询适当的名称,并使用动态SQL以正确的顺序运行drop,然后再使用alter
column语句和然后,以正确的顺序在alter列之后创建。
如果您知道没有约束,而只有索引,这将变得更加简单。
可能有些工具或库已经知道如何执行此操作。
同样,如果这是一个打包的应用程序,则可能无法确保本地DBA尚未添加索引。
注意:如果存在唯一约束,它将建立一个索引,您将无法使用DROP INDEX删除该索引。
问题内容: 我们需要将某些列的数据类型从int更改为bigint。不幸的是,其中一些表很大,大约有7-10百万行(但不宽)。 Alter表alter列将永远保留在这些表上。有没有更快的方法来实现这一目标? 问题答案: 巧合的是,大约3个小时前,我不得不做一些非常相似的事情。该表是3500万行,它相当宽,并且花了很多时间才能做到这一点: 这就是我最终得到的结果: 这次,这些陈述几乎是即时的。(在速度
问题内容: 在Access中(使用接近2 gb的数据库工作)的设计模式下尝试将数据类型从文本更改为数字时,我始终收到“磁盘空间不足或内存不足”的错误,因此我找到了一种解决方法,基本上是通过创建一个新列,将数据类型设置为此处的数字,将旧列的内容复制到其中,删除旧列,然后将新列重命名为旧列的名称。 我听说ALTER TABLE也可以用来更改数据类型。 有人可以给我一个示例,说明如何使用ALTER TA
我正在开发SQL Server 2012: 我有一个主键列为的表。我需要将其更改为GUID。 我是否要更改表并将int列作为主键删除? 添加GUID列并将其设置为主列,然后删除旧的INT列? 非常感谢。
问题内容: 我正在使用hibernate作为持久层。存在于同一表中的2个实体通过单表继承策略扩展了一个超类。 我有一个ID为4的B实例。如何将此实例的类型更改为C并保留其ID(4)? 上面的代码因 有可能吗? 问题答案: Hibernate尝试使持久性尽可能地透明-这意味着它尝试遵循与普通Java对象相同的原则。现在,用Java改写您的问题,您将获得: 如何将B类的实例转换为(不兼容的)C类的实例
如何在PySpark中更改嵌套列的datatype?对于rxample,如何将value的数据类型从string更改为int? 参考:如何在pyspark中将Dataframe列从String类型更改为Double类型
问题内容: 我想将表示为列表列表的表转换为。作为一个极其简化的示例: 将列转换为适当类型的最佳方法是什么(在这种情况下,将列2和3转换为浮点数)?有没有一种方法可以在转换为DataFrame时指定类型?还是先创建DataFrame然后遍历各列以更改各列的类型更好?理想情况下,我想以动态方式执行此操作,因为可以有数百个列,并且我不想确切指定哪些列属于哪种类型。我可以保证的是,每一列都包含相同类型的值