При этом используются INFORMATION_SCHEMA
объекты, а не sys
объекты (последние рекомендуются, но у меня было кое-что для первого), которые должны получить то, что вы ищете:
IF NOT EXISTS (SELECT 1
FROM INFORMATION_SCHEMA.COLUMNS ISC
JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC ON ISC.TABLE_SCHEMA = TC.TABLE_SCHEMA
AND ISC.TABLE_NAME = TC.TABLE_NAME
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU ON TC.TABLE_SCHEMA = KCU.TABLE_SCHEMA
AND TC.TABLE_NAME = KCU.TABLE_NAME
AND TC.CONSTRAINT_NAME = KCU.CONSTRAINT_NAME
AND ISC.COLUMN_NAME = KCU.COLUMN_NAME
WHERE ISC.TABLE_SCHEMA = N'dbo' --TABLE_SCHEMA is not always accurate
AND ISC.TABLE_NAME = N'Enrollment'
AND ISC.COLUMN_NAME = N'nosuchfield'
AND TC.CONSTRAINT_TYPE IN ('PRIMARY KEY','FOREIGN KEY'))
UPDATE dbo.Enrollment
SET nosuchfield = '666';