由于SQL性能优化或业务需求,往往在创建Table后需要扩展主键的长度,直接进行Alter Column会提示"ALTER TABLE ALTER COLUMN XXX failed because one or more objects access this colum",导致主键无法修改。这时可以使用DISABLE And ENABLE CHANGE_TRACKING临时取消约束,修改后再启用约束操作。
IF EXISTS ( SELECT 1
FROM sys.columns
WHERE name = '要修改的字段'
AND object_id = OBJECT_ID('要修改的表') )
BEGIN
IF EXISTS ( SELECT 1
FROM sys.change_tracking_tables
WHERE object_id = OBJECT_ID('要修改的表') )
BEGIN
ALTER TABLE 要修改的表 DISABLE CHANGE_TRACKING -- disable tracking
ALTER TABLE 要修改的表 ALTER COLUMN 要修改的字段 VARCHAR(50) NOT NULL
ALTER TABLE 要修改的表 ENABLE CHANGE_TRACKING -- enable tracking
END
ELSE
BEGIN
ALTER TABLE 要修改的表 ALTER COLUMN 要修改的字段 VARCHAR(50) NOT NULL
END
END