我有一个名为Lastmodified
的列,其数据类型为Date
,但应该是DateTime
。
有没有办法转换专栏?
当我使用SQL Server Management Studio的“设计”功能时,我收到以下错误:
不允许保存更改。您所做的更改需要以下内容 要删除并重新创建的表。
对删除表格并不感兴趣,我只是想知道是否可以将列从Date
转换为Datetime
,或者我是否必须删除该列并创建一个新列正确的数据类型?
答案 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中的一个安全设置 - 如果您喜欢冒险,可以将其关闭: - )
禁用那里的复选框,你可以做任何你喜欢的事情!
答案 2 :(得分:3)
您无法更改列的类型。您需要创建一个新列,复制值,然后删除原始列。
SQL Management Studio通常通过创建具有新列名的临时表,复制值,使用旧列删除原始表,然后将新临时表重命名为新名称来实现此目的。通常它会在没有人意识到的情况下实现。
但是,这可能是一种非常具有侵入性的方法,特别是如果表中已经有很多行,那么您可能只想编写一个SQL脚本将新列添加到表中,复制值,删除原始列,然后使用sp_rename将新的临时列名更改回原始列名。这与SQL Management Studio正在进行的操作相同,只是它们正在删除并重新创建整个表,而您只是删除并重新创建列。
但是,如果您想让SQL Manangement Studio以这种方式执行此操作,则可以关闭该错误消息。我相信它最初是添加的,因为人们不想放弃并默认重新创建表。要关闭此消息,请转到工具 - >选项 - 设计器,然后取消选中“阻止保存需要重新创建表格的更改”,那么您应该是能够在设计师中保存您的更改。