我有一个专栏,我认为该专栏的声明是错误的。它包含数据,我不希望丢失数据。
我希望将定义从 varchar(max) 更改为 varchar(整数)。我的印象是我不能只改变列类型?
最好的方法是创建临时列“column2”,将数据从有问题类型的列传输到此列,删除有问题的列,然后将临时列重命名为原始有问题的列?
如果是这样,如何将问题列中的值复制到新列?
编辑:对于任何有同样问题的人,你can只需使用 ALTER 语句即可。
只要数据类型有些“相关” - 是的,您绝对可以做到这一点。
您可以更改INT
to a BIGINT
- 第二种类型的值范围更大,因此您不会面临“丢失”任何数据的危险。
您可以更改一个VARCHAR(50)
to a VARCHAR(200)
- 再次,类型兼容,大小越来越大 - 没有截断任何内容的风险。
基本上,你只需要
ALTER TABLE dbo.YourTable
ALTER COLUMN YourColumn VARCHAR(200) NULL
管他呢。只要您的字符串不超过 200 个字符,就可以了。不确定如果您确实有更长的字符串会发生什么 - 要么转换会失败并出现错误,要么它会继续告诉您某些数据可能已被截断。所以我建议你先尝试一下copy您的数据:-)
如果你需要改变一个,它会变得有点棘手VARCHAR
to an INT
或类似的东西 - 显然,如果您的列值不“适合”新类型,则转换将会失败。但即使使用单独的“临时”新列也无法解决此问题 - 您需要以某种方式处理那些“不兼容”的情况(忽略它们,将 NULL 保留在那里,将它们设置为默认值 - 某些东西)。
此外,还可以在VARCHAR
and NVARCHAR
如果你有例如非西欧字符 - 转换时您可能会丢失某些条目,因为它们无法以其他格式表示,或者从一种类型到另一种类型的“默认”转换无法按预期工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)