我必须在数据库中将列的数据类型从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
请给我一些建议。
答案 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。