我在将数据类型从VARCHAR(50)更改为INT时遇到问题。我尝试了很多,但仍然没有得到它,并且没有使用变量,也需要在从varchar转换为int后将该标识添加到该列。
先谢谢
答案 0 :(得分:3)
如果不支持ALTER TABLE ... ALTER COLUMN
(如您的情况),更改列类型最好分四步完成:
sp_rename
,将新列的名称与旧列交换另一种选择是:
最佳路径取决于许多因素,例如数据大小,现有约束,引用表的外键,非聚簇索引,引用表的视图和用户函数,复制,现有触发器和过程等等等等。不可能给出一个简单的答案,因为当考虑 all 的含义时问题本身就很复杂。
答案 1 :(得分:1)
您可以尝试多步骤过程,例如:
/** Add new column with identity **/
ALTER TABLE MyTable
ADD NewColumnTempName INT NOT NULL IDENTITY (1, 1) DEFAULT (0)
GO
/** Allow us to enter values into the entity field **/
SET IDENTITY_INSERT MyTable ON;
GO
/** Push the data from the varchar column into the new column **/
UPDATE MyTable
SET NewColumnTempName = CAST(OldColumnName AS INT);
GO
/** Get rid of the old column **/
ALTER TABLE MyTable
DROP OldColumnName;
GO
/** Rename the newcolumn tot he old name **/
EXEC sp_rename 'MyTable.NewColumnTempName', 'OldColumnName', 'COLUMN';
/** Switch back on the identity column **/
SET IDENTITY_INSERT MyTable OFF
GO
答案 2 :(得分:0)
第一个明显的猜测是列中的数据无法转换为INT。这会返回任何结果吗?
select ColumnYouWantToConvert
from YourTable
where isnumeric(ColumnYouWantToConvert) = 0
答案 3 :(得分:0)
您需要删除DEFAULTS,CHECKS等,ALTER列并重新创建DEFAULTS,CHECKS和键
ALTER TABLE T DROP CONSTRAINT C1
ALTER TABLE T DROP CONSTRAINT C2
ALTER TABLE T DROP CONSTRAINT C3
...
ALTER TABLE T ALTER COLUMN Cl int [null|notnull]
ALTER TABLE T ADD
CONSTRAINT C1 ... ,
CONSTRAINT C2...,
CONSTRAINT C3...,