更改数据库中列的数据类型

时间:2015-10-20 05:05:22

标签: sql database db2

我必须在数据库中将列的数据类型从CHAR更改为INTEGER。我使用了以下查询:

ALTER TABLE cert_request
    ALTER column CERT_REQUEST_NBR SET TYPE(INTEGER);

然而,它在关键字"列"中显示错误并在执行时将错误代码设置为-104。以下是错误日志;

Error: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=ALTER TABLE CERT_REQUEST   ALTER CERT_R;BEGIN-OF-STATEMENT;<create_proc>, DRIVER=3.50.152
SQLState:  42601
ErrorCode: -104

我还尝试使用Modify关键字,但我的数据库中没有标识。

我也尝试了以下查询但又没有用。

alter table CERT_REQUEST alter column cert_request_nbr  integer

它出现以下错误

Error: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=integer;umn cert_request_nbr;<alter_col_action1>, DRIVER=3.50.152
SQLState:  42601
ErrorCode: -104

请给我一些建议。

7 个答案:

答案 0 :(得分:0)

使用MySQL类型转换或ALTER

ALTER TABLE cert_request MODIFY CERT_REQUEST_NBR INTEGER;

或尝试MySQL类型转换

CAST(CERT_REQUEST_NBR AS UNSIGNED)

答案 1 :(得分:0)

你必须在MYSQL中使用MODIFY而不是ALTER

ALTER TABLE cert_request
    MODIFY CERT_REQUEST_NBR INTEGER;

在DB2中你可以尝试这样:

ALTER TABLE cert_request ADD COLUMN Temporary INTEGER;
UPDATE cert_request SET Temporary=CAST(CERT_REQUEST_NBR AS INTEGER);
ALTER TABLE cert_request DROP COLUMN CERT_REQUEST_NBR;
ALTER TABLE cert_request CHANGE Temporary CERT_REQUEST_NBR INTEGER;

答案 2 :(得分:0)

你试过了吗?

ALTER TABLE `cert_request` CHANGE `CERT_REQUEST_NBR` `CERT_REQUEST_NBR` INT(10) NOT NULL;

请注意,任何非整数的数据都将丢失。

答案 3 :(得分:0)

如果指定要使用的数据库,将会很有帮助。在oracle中,解决方案应该是

Alter table cert_request modify CERT_REQUEST_NBR number(30)

在db2中(基于您提供的错误,我相信您的数据库是db2)解决方案是

Alter table cert_request alter column CERT_REQUEST_NBR set datatype decimal(30)

答案 4 :(得分:0)

您在“设置”和“类型”之间缺少“数据”一词。

应该是这样的:

ALTER TABLE cert_request     ALTER列CERT_REQUEST_NBR SET DATA TYPE(INTEGER);

答案 5 :(得分:-1)

可能是,这是由于字段值中存在varchar数据而发生的。

删除该数据,然后运行查询

答案 6 :(得分:-1)

这是因为您的列的数据不是整数。您将需要删除这些数据并尝试或者您可以运行上面提到的查询,这将使您的数据为空,而不是int。