sql - 在 SQL Server 中,将 int 类型的列更改为 text

标签 sql sql-server database casting

我想将 SQL Server 中的列从 int 类型更改为 text 类型,同时保持列名称。该列的表有很多数据,我不想丢失它。 SQL Server 似乎不支持从 int 到 text 的隐式或显式转换,否则这将非常简单。那么,您将如何仅使用 SQL 来完成它?

最佳答案

由于 MS SQL Server(与大多数数据库一样)不支持直接更改现有列的类型,因此您必须分步进行。我过去解决此类问题的方法是(假设您的表名为“foo”,您的列名为“bar”):

ALTER TABLE foo ADD COLUMN tempbar text;
UPDATE foo SET tempbar = cast(cast(bar as varchar) as text);
ALTER TABLE foo DROP COLUMN bar;
ALTER TABLE foo ADD COLUMN bar text;
UPDATE foo SET bar = tempbar;
ALTER TABLE foo DROP COLUMN tempbar;

(某些 SQL 语法可能已关闭,自从我上次这样做已经一年了,在不同的工作,所以我无法访问 MS SQL Server 或源代码。你还必须做如果您的专栏上有索引,则更多内容。)

支持 Donnie用于转换语法。

[编辑]

Tom H.建议使用 sp_renametempbar 重命名为 bar 的存储过程(而不是步骤 4-6)。这是一个特定于 MS SQL Server 的解决方案,可能适用于许多情况。我描述的解决方案将在任何 SQL 数据库上工作(通过语法修订),无论版本如何。在我的例子中,我处理的是主键和外键,而不仅仅是一个字段,所以我必须仔细地对所有操作进行排序,并且可以跨多个版本的 MS SQL Server 移植——明确的工作对我有利。

关于sql - 在 SQL Server 中,将 int 类型的列更改为 text,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1833540/

相关文章:

mysql - SQL 按常用值数量排序

sql - 在 T-Sql 插入语句中使用 Row Constructor 语法有什么好处?

mysql - 查询最多 'regular'消费客户的方法(AdventureWorks)

mysql - SQL 查询 - 提取带有空值的查询

sql - 从临时表插入

mysql - 使用多个条件从多对多关联实体中选择实体

sql - IDENTITY_INSERT ON 失败并出现错误 "...is not a user table. Cannot perform SET operation"

sql - Identity_insert 在临时表中

database - 文件系统和数据库之间的写入性能

mysql - 我是新来的,试图满足嵌套的 if else 条件