将列从Date转换为Datetime Sql Server

时间:2011-12-08 11:51:18

标签: sql sql-server ssms

我有一个名为Lastmodified的列,其数据类型为Date,但应该是DateTime

有没有办法转换专栏?

当我使用SQL Server Management Studio的“设计”功能时,我收到以下错误:

  

不允许保存更改。您所做的更改需要以下内容   要删除并重新创建的表。

对删除表格并不感兴趣,我只是想知道是否可以将列从Date转换为Datetime,或者我是否必须删除该列并创建一个新列正确的数据类型?

3 个答案:

答案 0 :(得分:24)

除非该列参与一个或多个约束,否则不应该删除表并重新创建它。

您可以使用SQL执行此操作:

ALTER TABLE Tab ALTER COLUMN LastModified datetime2 not null

(我选择了datetime2而不是datetime,因为前者是recommended for all new development work,而且由于该列目前是date,所以我知道您使用的是SQL Server 2008或后)

答案 1 :(得分:3)

这只是SQL Server Mgmt Studio中的一个安全设置 - 如果您喜欢冒险,可以将其关闭: - )

enter image description here

禁用那里的复选框,你可以做任何你喜欢的事情!

答案 2 :(得分:3)

您无法更改列的类型。您需要创建一个新列,复制值,然后删除原始列。

SQL Management Studio通常通过创建具有新列名的临时表,复制值,使用旧列删除原始表,然后将新临时表重命名为新名称来实现此目的。通常它会在没有人意识到的情况下实现。

但是,这可能是一种非常具有侵入性的方法,特别是如果表中已经有很多行,那么您可能只想编写一个SQL脚本将新列添加到表中,复制值,删除原始列,然后使用sp_rename将新的临时列名更改回原始列名。这与SQL Management Studio正在进行的操作相同,只是它们正在删除并重新创建整个表,而您只是删除并重新创建列。

但是,如果您想让SQL Manangement Studio以这种方式执行此操作,则可以关闭该错误消息。我相信它最初是添加的,因为人们不想放弃并默认重新创建表。要关闭此消息,请转到工具 - >选项 - 设计器,然后取消选中“阻止保存需要重新创建表格的更改”,那么您应该是能够在设计师中保存您的更改。

Prevent saving changes that require table re-creation