SQLSERVER修改字段长度语句如何避免反复执行?
|
freeflydom
2025年5月12日 10:5
本文热度 50
|
:SQLSERVER修改字段长度语句如何避免反复执行?
假设要修改workrep表的marker_remark1字段,修改前长度只有30,希望修改成255。
修改语句:
ALTER TABLE workrep ALTER COLUMN marker_remark1 nvarchar(255);
加上判断如果修改过就不再修改,避免重复执行:
IF EXISTS (SELECT syscolumns.name FROM syscolumns RIGHT OUTER JOIN sysobjects ON syscolumns.id = sysobjects.id WHERE (sysobjects.name='workrep') AND (syscolumns.name='marker_remark1') AND syscolumns.length <> 510) ALTER TABLE workrep ALTER COLUMN marker_remark1 nvarchar(255);
为什么查询是不等于510不是255?因为marker_remark1字段是nvarchar类型,所以查询长度时要255*2=510。
如果担心这种写法容易误解,可以换一个判断方法:
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'workrep' AND COLUMN_NAME = 'marker_remark1' AND CHARACTER_MAXIMUM_LENGTH <> 255) ALTER TABLE workrep ALTER COLUMN marker_remark1 nvarchar(255);
这种方法就保证查询和修改长度看起来一样,容易理解。
该文章在 2025/5/12 10:15:39 编辑过