sqlserver 修改表的字段数据类型

嘿,你说在SQL Server中改变字段类型真的很烦人。
上周,有客户问我想把一个VARCHAR字段改成INT,但当场就卡住了。
我直接给他拆了,发现你说的那两个步骤并没有跑掉。

第一步是处理数据,这一点尤为重要。
你是对的,你可以直接暴力更改,例如将VARCHAR转换为INT。
如果混入了NULL或者‘abc’之类乱七八糟的东西,肯定会报错。
上次帮北京的一个团队,有一个表字段a是VARCHAR(2 0),里面存放的是各种身份证号、手机号、纯号码。
我想将其更改为 INT,但是 SQL 错误响起,说“无法将数据类型 varchar 转换为 int”。

所以你必须先清理它。
您提到使用 UPDATE 来替换 NULL 值,例如 UPDATE table SET field a='0' WHERE field a IS NULL; 这是一个很好的技巧,但关键是如何摆脱非数字值。
如果该字段主要包含身份证号码,则可以使用REPLACE(field a, '身份证号码的前几位', '') 先去掉固定前缀,然后再处理剩余的号码。
或者使用ISNUMERIC()函数,但是这个函数的判断范围有点宽,可能不太准确。
对于更复杂的,你必须使用 CASE WHEN ... THEN ... 语句,例如 CASE WHEN field a LIKE '%[^0-9 ]%' THEN NULL ELSE CAST (field a AS INT) END。
这个逻辑就是尝试用NULL替换非数字的,然后你决定是否删除这些行或者使用UPDATE将NULL替换为0。
如何更改取决于数据是否脏以及业务是否可以接受数据丢失。

第二步是改变类型。
这个很简单,但前提是上一步已经清洗过数据。
只需使用 ALTER TABLE 表 ALTER COLUMN 字段为 INT; 这句话就可以了。
通常清理完数据后,我会先在小范围的数据上进行测试,确认没有问题,然后在整个表上执行。
2 02 3 年在上海做一个项目,改一个几百兆的表字段时,先在临时表里练习,把NULL换成0,把乱七八糟的字符全部清除,然后就放心地使用ALTER TABLE了。

总结一下,你提到的两步流程中,处理数据兼容是核心,改变类型是点睛之笔。
两者缺一不可。
如果你的数据特别干净,比如都是数字,那么改起来会比较快,但大多数情况下你还是要按照你提到的步骤来。

怎样将sql数据库中同一表中的一列数据更改为另外一列的数据?

1 、打开SQL Server Management Studio,创建表:CREATE TABLE TBLUpdate (Id INT, Col1 VARCHAR(1 00), Col2 VARCHAR(1 00)); 2 、插入3 条数据:INSERT tblUpdate(Id, Col1 , Col2 ) VALUES(1 , '数据1 ', 'Bad'), (2 , '数据2 ', 'Bad'), (3 , '数据3 ', 'Bad'); 3 、查询数据:SELECT FROM tblUpdate; 4 、批量更改所有数据: UPDATE tblUpdate SET Col2 = 'Female'; 5 、修改一定条记录: UPDATE tblUpdate SET Col2 = '第二次修改' WHERE Id = 1 OR Id = 2 ; 6 、根据条件更改值: UPDATE tblUpdate SET Col2 = CASE Id WHEN 1 THEN 'Modify 1 ' WHEN 2 THEN 'Modify 2 ' ELSE END Col2 ; 7 、批量修改时使用where和case: UPDATE tblUpdate SET Col2 = CASE Id WHEN 1 THEN '条件1 修改' WHEN 2 THEN '条件2 修改' WHEN 3 THEN '条件3 修改' ELSE Col2 END WHERE Id IN (1 , 2 , 3 );