Получается, что SYS_CHANGE_COLUMNS
состоит из массива байтов, который можно сгруппировать в группы по 4 байта. Чем больше столбцов было изменено, тем длиннее будет массив байтов и, следовательно, тем больше групп вы сможете создать. Первый байт каждой группы представляет собой идентификатор столбца, который был изменен. Во всех моих тестах остальные 3 байта каждой группы были пустыми (0). Я предполагаю, что эти байты будут использоваться, если у вас ID столбца больше 255. Кажется, порядок, в котором были изменены столбцы, определяет порядок, в котором они появляются в массиве байтов. Кроме того, первая группа из 4 байтов всегда будет пустой (0), я не уверен, почему.
Чтобы использовать это в коде приложения, все, что вам нужно сделать, это получить сопоставление для каждого имени столбца и это соответствующий идентификатор столбца. В предыдущем абзаце следует объяснить, как использовать SYS_CHANGE_COLUMNS
для определения идентификатора столбца в массиве байтов.
C# пример:
public static IEnumerable<int> GetColumnIdsInMask(byte[] columns)
{
// TODO: deal with column IDs larger than 255
for (var i = 4; i < columns.Length; i += 4)
{
yield return columns[i];
}
}
public static bool IsColumnInMask(int columnId, byte[] columns)
{
return GetColumnIdsInMask.Any(x => x == columnId);
}