У меня есть две идеи too many columns против неправильного порядкового положения.
Код ссылки от 2006 г. Так было написано для SQL Server 2005
. На основании COLUMNS_UPDATED()
:
ORDINAL_POSITION колонка зрения INFORMATION_SCHEMA.COLUMNS является не совместим с битовой комбинации столбцов, возвращаемого COLUMNS_UPDATED.
Чтобы получить битовый шаблон, совместимый с COLUMNS_UPDATED, ссылки на свойстве ColumnID функции системы COLUMNPROPERTY при запросе вида INFORMATION_SCHEMA.COLUMNS.
CREATE TABLE tab(id INT, col1 INT, col2 INT, col3 INT,
col4 INT, col5 INT, col6 INT, col7 INT, col8 INT);
ALTER TABLE tab DROP COLUMN col1;
ALTER TABLE tab DROP COLUMN col5;
ALTER TABLE tab ADD col9 INT;
ALTER TABLE tab ADD col1 INT;
SELECT column_name,
ordinal_position,
COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA + '.' + TABLE_NAME),
COLUMN_NAME, 'ColumnID') AS pos
FROM INFORMATION_SCHEMA.columns
WHERE [TABLE_NAME] like '%tab%'
ORDER BY ordinal_position;
SqlFiddleDemo
Выходные:
╔══════════════╦═══════════════════╦═════╗
║ column_name ║ ordinal_position ║ pos ║
╠══════════════╬═══════════════════╬═════╣
║ id ║ 1 ║ 1 ║
║ col2 ║ 2 ║ 3 ║
║ col3 ║ 3 ║ 4 ║
║ col4 ║ 4 ║ 5 ║
║ col6 ║ 5 ║ 7 ║
║ col7 ║ 6 ║ 8 ║
║ col8 ║ 7 ║ 9 ║
║ col9 ║ 8 ║ 10 ║
║ col1 ║ 9 ║ 11 ║
╚══════════════╩═══════════════════╩═════╝
Результаты:
ORIDINAL_POSITION -> no gaps, range 1-9
pos(aka ColumnId) -> gaps, range 1-11, 2 and 6 skipped
Альте rnatively, чтобы проверить, если столбец chagned или вы не можете использовать UPDATE
:
UPDATE (колонка)
Возвращает логическое значение, указывающее, была ли сделана INSERT или UPDATE попытки на указанный столбце таблицы или просмотр. UPDATE() - это , используемый в любом месте тела триггера Transact-SQL INSERT или UPDATE , чтобы проверить, должен ли триггер выполнять определенные действия.
Ошибка/предупреждение/работа частично? – lad2025