Я использую COLUMNS_UPDATED () в триггере для определения тех столбцов, значения которых должны быть записаны в таблицу аудита. Триггер / аудит работал нормально в течение нескольких лет. Вчера я заметил, что одитинг больше не работает последовательно.
Я перечислил первые сорок столбцов рассматриваемой таблицы внизу для справки вместе с ORDINAL_POSITION из INFORMATION_SCHEMA.COLUMNS. Всего в таблице 109 столбцов.
Я добавил print COLUMNS_UPDATED()
к своему триггеру, чтобы получить отладочную информацию.
Когда я обновляю CurrentOnFleaTick
, 9-й столбец, я вижу следующее:
0x0001000000000000000000000000
Это ожидается - 9-й столбец должен быть представлен как младший значащий бит второго байта. Точно так же, если я обновляю HasAttackedAnotherAnimalExplanation
, я вижу это:
0x0000010000000000000000000000
Опять же, ожидается - 17-й столбец должен быть представлен как младший значащий бит третьего байта.
Но ... когда я обновляю HouseholdIncludesCats
, я вижу это:
0x0000000200000000000000000000
Не ожидается! Там, где вы видите 2
, должно быть 1
, так как порядковая позиция HouseholdIncludesCats
равна 25, что делает его первым столбцом, представленным в четвертом байте, который должен быть представлен в младшем значащем бите этого байта.
Я сузил дело, обновив каждый столбец между HasAttackedAnotherAnimalExplanation
и HouseholdIncludesCats
и обнаружил, что проблема «выключено одним» у меня начинается с HouseTrainedId
, порядковый номер 24. При обновлении HouseTrainedId
I ' ожидаю
0x0000800000000000000000000000
но вместо этого я получаю
0x0000000100000000000000000000
что я считаю неправильным, и это то, что я ожидаю получить за обновления в столбце HouseholdIncludesCats
.
Я не верю, что маска должна пропустить. В настоящее время маска не использует самый старший бит 3-го байта.
Я недавно уронил столбец, но у меня нет записи о его порядковом положении. Основываясь на исходном коде, который создал бы таблицу, я считаю, что порядковый номер отброшенного столбца был НЕ 24. (Я думаю, что это было 7 ... Это было определено после BreedIds
.)
Я не обязательно ищу глубокое определение первопричины. Если бы я мог что-то сделать для сброса любых внутренних данных, которые использует SQL Server, это было бы хорошо. Вроде как идея перестроить индекс для метаданных таблицы? Есть ли что-то подобное, что может это исправить?
Заранее спасибо за полезные ответы! :)
COLUMN_NAME ORDINAL_POSITION
PetId 1
AdopterUserId 2
AdoptionDeadline 3
AgeMonths 4
AgeYears 5
BreedIds 6
Color 7
CreatedOn 8
CurrentOnFleaTick 9
CurrentOnHeartworm 10
CurrentOnVaccinations 11
FoodTypeId 12
GenderId 13
GuardianForMonths 14
GuardianForYears 15
HairCoatLength 16
HasAttackedAnotherAnimalExplanation 17
HasAttackedAnotherAnimalId 18
HasBeenReferredByShelter 19
HasHadTraining 20
HasMedicalConditions 21
HasRecentlyBittenExplanation 22
HasRecentlyBittenId 23
HouseTrainedId 24
HouseholdIncludesCats 25
HouseholdIncludesChildren5to10 26
HouseholdIncludesChildrenUnder5 27
HouseholdIncludesDogs 28
HouseholdIncludesOlderChildren 29
HouseholdIncludesOtherPets 30
HouseholdOtherPets 31
KnowsCommandDown 32
KnowsCommandPaw 33
KnowsCommandSit 34
KnowsCommandStay 35
KnowsOtherCommands 36
LastUpdatedOn 37
LastVisitedVetOn 38
ListingCodeId 39
LitterTypeClumping 40