我想在sql中将列[varchar]的数据类型更改为[datetime]而不会丢失数据

时间:2015-07-14 10:35:48

标签: sql-server datetime type-conversion

我已尝试保存更改,但它会出现此错误:

  

不允许保存更改您所做的更改需要更改   下表要删除并重新创建。你有......

例如,

  PersonID In_time Out_time
15001 10:00 AM 7:20 PM
15002 10:10 AM 7:10 PM
15003 10:15 AM 7:00 PM

'in_time'和'out_time'字段位于varchar(50)

我想将列的数据类型从varchar更改为datetime

我只是在GUI中尝试而不是在查询中。因为我是..,如果我编写任何错误的脚本,它会丢失数据,所以我知道这样做 我是sql的新手。所以请建议我做什么..

2 个答案:

答案 0 :(得分:0)

在将值从表复制到临时表之后,创建 TEMP 表以复制表中的值。在它之后,您可以使用日期截断您的表或列,之后您可以将nvarchar列的数据类型更改为datetime,在将值从临时表复制到普通表之后,您可以执行以下操作:

-- Creation of sample table
CREATE TABLE ChangeColType
(
    Data NVARCHAR(20)
)

-- Inserting sample data 
INSERT INTO ChangeColType VALUES ('10:00 AM')

-- Creatig temp table
CREATE TABLE #TempValues
(
    Data NVARCHAR(50)
)

-- Copying values from table to temp table
INSERT INTO #TempValues
SELECT Data 
FROM ChangeColType

-- Truncating your table
TRUNCATE TABLE ChangeColType

-- Changing datatype of your column
ALTER TABLE ChangeColType
ALTER COLUMN Data DATETIME

-- Copying back values from temp table to your table
INSERT INTO ChangeColType
SELECT Data 
FROM #TempValues

-- Selecting values from table after datatype changed
SELECT CONVERT(varchar(15),CAST(Data AS TIME),100)   
FROM ChangeColType

-- Dropping temp table
DROP TABLE #TempValues

答案 1 :(得分:0)

如果您要通过GUI更改表格的结构,请检查:

工具菜单 - >自定义 - >转到使用弹出窗口打开的左侧菜单上的Designers语音,然后取消选中“禁止保存需要重新创建表的更改”。 I add menu (in Italian version) I add a screenshot (in Italian version)