powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Внутренний идентификатор таблицы
25 сообщений из 30, страница 1 из 2
Внутренний идентификатор таблицы
    #39847320
ppa32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, дамы и господа

Вопрос такой: есть некая таблица, в которой нет первичного ключа (heap). В частности, это табличная часть документа из 1ски. И вот вопрос: есть ли какое - нибудь скрытое системное поле в таблице SQL, по которому всеж - таки можно было однозначно идентифицировать запись в этой таблице? Не знаю, может внутренний ГУИД какой - нибудь, или еще что - то...
...
Рейтинг: 0 / 0
Внутренний идентификатор таблицы
    #39847324
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ppa32по которому всеж - таки можно было однозначно идентифицировать запись в этой таблице?Если есть unique constraint, то по его полям и можно идентифицировать. Видимо, для административных целей можно и по положению на конкретной странице, но это сложно и, скорее всего, только до её модификации.
...
Рейтинг: 0 / 0
Внутренний идентификатор таблицы
    #39847325
Код: sql
1.
2.
SELECT %%physloc%%, *
FROM ...
...
Рейтинг: 0 / 0
Внутренний идентификатор таблицы
    #39847327
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tunknownЕсли есть unique constraint
Для табличных частей это код родителя и номер строки.
...
Рейтинг: 0 / 0
Внутренний идентификатор таблицы
    #39847334
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Syrovatchenko
Код: sql
1.
2.
SELECT %%physloc%%, *
FROM ...



Для лучшего понимания я все же советовал бы sys.fn_PhysLocFormatter(%%physloc%%)
...
Рейтинг: 0 / 0
Внутренний идентификатор таблицы
    #39847337
ppa32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Syrovatchenko,

Идея хорошая, но, к сожалению, 1ска перезаписывает табличную часть при изменении. Ну то есть если в документе было 4 строки:
0xE5FFB60001000500
0xE5FFB60001000600
0xE5FFB60001000700
0xE5FFB60001000800

Мы удаляем из интерфейса строку 0xE5FFB60001000700 и записываем документ, то в таблице будет вот так:
0xE5FFB60001000500
0xE5FFB60001000600
0xE5FFB60001000700
где 0xE5FFB60001000700 - это бывшая 0xE5FFB60001000800
...
Рейтинг: 0 / 0
Внутренний идентификатор таблицы
    #39847338
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Внутренний идентификатор таблицы
    #39847339
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ppa32, это не 1C-ка перезаписывает, это SQL Server.
Данная виртуальная колонка показывает значение физического расположения строки, но это физическое расположение может меняться во множестве случаев - ребилды, сжатия, разделение страниц при вставке, реорганизация и т.д.
...
Рейтинг: 0 / 0
Внутренний идентификатор таблицы
    #39847340
ppa32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tunknown, юник констрейнт, к сожалению, ничего не даст: пара полей, которая в нем есть, при записи документа из интерфейса 1С перезаписывается, и, если кто - то убил строку из середины документа, то поля из убитой строки начинают соответствовать следующей строке документа, которая там была по списку.
...
Рейтинг: 0 / 0
Внутренний идентификатор таблицы
    #39847341
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One https://docs.microsoft.com/en-us/sql/t-sql/functions/checksum-agg-transact-sql?view=sql-server-2017
Если две строки идентичны - это значение также будет одинаковым.
ну и CHECKSUM_AGG - это агрегатная функция, вы, наверное, имели в виду CHECKSUM
...
Рейтинг: 0 / 0
Внутренний идентификатор таблицы
    #39847343
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для отслеживания изменений в таблице применять
...
Рейтинг: 0 / 0
Внутренний идентификатор таблицы
    #39847356
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ppa32tunknown, юник констрейнт, к сожалению, ничего не даст: пара полей, которая в нем есть, при записи документа из интерфейса 1С перезаписывается, и, если кто - то убил строку из середины документа, то поля из убитой строки начинают соответствовать следующей строке документа, которая там была по списку.Если вам нужно сослаться на строку такой таблицы вне 1C, то можно закостылить. Если 1C не сильно сопротивляется триггерам, то можно сделать таблицу маппинга и зафиксировать в ней первое значение этой пары полей в качестве идентификатора дополнив текущим значением пары. Потом все соответствующие операции с основной таблицей нужно будет пробрасывать через этот маппинг. Накладные расходы велики, но результата можно добиться.
...
Рейтинг: 0 / 0
Внутренний идентификатор таблицы
    #39847375
1C Developer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ppa32, а что за задача стоит перед Вами?

Возможно ее следует решать на стороне 1С?

На всякий случай в 1С документ может быть записан, но не проведен, в этом случае данные в таблице будут, но использовать их или передавать куда-либо, возможно, не требуется.

А еще документ может быть помечен на удаление или еще 100 других бизнес-нюансов реализованных на стороне 1С...
...
Рейтинг: 0 / 0
Внутренний идентификатор таблицы
    #39847455
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ppa32,

хэш подсчитайте. А как 1С находит нужный документ?
...
Рейтинг: 0 / 0
Внутренний идентификатор таблицы
    #39847463
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

По GUID документа, а строчку в табличной части по GUID документа и номеру строки.
...
Рейтинг: 0 / 0
Внутренний идентификатор таблицы
    #39847518
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4d_monster,

ну так GUID и номер сроки и есть ключ в этой таблице.
...
Рейтинг: 0 / 0
Внутренний идентификатор таблицы
    #39847533
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

Автор (вероятно) хочет аналог IDENTITY, чтобы ещё и изменения отслеживать.
...
Рейтинг: 0 / 0
Внутренний идентификатор таблицы
    #39847574
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
4d_monsterВладислав Колосов,

Автор (вероятно) хочет аналог IDENTITY, чтобы ещё и изменения отслеживать.
Автор, вероятно, хочет изменившиеся записи дергать и где-нибудь в хранилище обновлять.
И не знает, как это без ключа сделать.

Мне, кстати, это тоже интересно.
СТ на куче включить не получится.
...
Рейтинг: 0 / 0
Внутренний идентификатор таблицы
    #39847642
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggsterАвтор, вероятно, хочет изменившиеся записи дергать и где-нибудь в хранилище обновлять.Если бы знать, что нужно автору?
Изменившиеся записи можно отслеживать триггером
...
Рейтинг: 0 / 0
Внутренний идентификатор таблицы
    #39847730
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что делал я ( это НЕ для таблиц 1С , в адинЦэ я не шарю вообще):
1. Создаётся таблица журналирования - LOG - (RowId bigint identity, RowTime datetime, ActionId bigint, ActionType char(1) {I, D} , WhoCorr nvarchar() (user), ... sysuser nvarchar(), SourceServerNmae nvarchar(), SourceDataBaseName nvarchar(), Updated_fields_mask, далее идут поля исходной таблицы ....
2. На таблицу-LOG вешается триггер, который отслеживает ЧТО добавилось - нужен ТОЛЬКО для того, что бы при вставке записей в ЛОГирующую таблицу информации из триггеров наблюдаемой таблицы (Insert Delete, Update) проставлял на блок один ActionId, равный тому RowId, который для первой вставившейся записи, - это несущественно (при UPDATE записи"наблюдаемой" таблицы в LOG прилетают последовательно по две записи от UPDATE-триггера - одна из deleted, другая - из inserted) , но облегчает жизнь.
3. На наблюдаемую таблицу вешаются триггеры на insert, delete, update для записи в LOG-таблицу того, что нашлось в inserted и deleted...

LOG-таблица живёт в отдельной базе на том же инстансе.

Работает лет пять. Сервер напрягает не сильно, хотя строки ёмкие и их достаточно. Админ туда периодически лезет посмотреть. И мне иногда приходится "шерстить" когда вдруг(!) пропадают/меняются документы и "Ой!, оно само сломалось..." (предусмотрительно фиксируются не только логин/юзернэйм, но и ssid, connectionId, application_name,.... ,- там чего только не найдёшь ) . Мониторятся две таблицы: шапки документов и шапки платежей. Всё остальное уже можно отыскать по бэкапам зная примерно момент изменения (до этого, правда, я не доходил,- достаточно просто рассказать кто, что и как менял посекундно - народ охреневает и фигни больше не делает).

Год назад привернул "чистку LOG-таблиц" - еженощный JOB - удаляется всё, что старше двух (или трёх?) кварталов.

ВНИМАНИЕ! Этот вариант хорош только тогда, когда аппликаха (или хранимки) не занимаются "кривым" анализом значений Identity insert после вставки в "контролируемые" таблицы и т.п. ... У меня в одном из случаев наладить похожее протоколирование на продакшне повалились пустые документы. Хотя тесты разработчиков базы были норм ...

Ну и в конце концов - есть "отслеживание изменений" (но у меня так ни разу и не "сложилось")...
...
Рейтинг: 0 / 0
Внутренний идентификатор таблицы
    #39847763
FFFFFFFF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что, самостоятельно добавить поле с identity нельзя? Это сломает работу 1-С?
...
Рейтинг: 0 / 0
Внутренний идентификатор таблицы
    #39848055
ppa32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tunknown, нечто подобное можно сделать средствами 1с: создать поле в табличной части документа, которое никто не видит, и писать туда рандомный ГУИД, если оно не заполнено. Средставми 1с же и навесить триггер. В терминах 1с он называется "Подписка на событие". Но вопрос в том, что триггеры придется вешать для всех табличных частей, а хочется красивое универсальное решение.
...
Рейтинг: 0 / 0
Внутренний идентификатор таблицы
    #39848057
ppa32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1C Developer,

Проблему и пытаюсь решить на стороне 1с, но вопрос в том, как отследить факт того, что из документа строчку удалили, и какую. Или добавили.

Суть задачи в том, чтобы создать полное логирование действий пользователей по всем базам, и консолидировать эту информацию со всех баз 1с в одной SQLной базейке. Потом дописать в 1с интерфейс к ней, и смотреть, кто, где, что, когда и в какой базе 1С поменял.
...
Рейтинг: 0 / 0
Внутренний идентификатор таблицы
    #39848058
ppa32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
4d_monster, в точку!
...
Рейтинг: 0 / 0
Внутренний идентификатор таблицы
    #39848059
ppa32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SIMPLicity_, проблема в том, что таблиц, на которые нужно навесить триггеры, сотни в каждой базе 1с (табличные части дкоументов). И очень не хочется туда влазить. Добавить какие - то свои объекты, думаю, не страшно, а вот таблицы 1с лучше не трогать от греха.
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Внутренний идентификатор таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]