[RowLog Contents 0] — Как получить значения этого поля (t-sql)?

Всем привет.
Суть в общем то простая :
Есть 1с-ная серверная база. Пишу простенький запрос в MS SQL menagement studio, чтобы посмотреть как в таблицу документа был записан очередной документ. Проще говоря, хочу посмотреть в журнале транзакций, какие данные передавались в таблицу для записи документа.
Пробовал таким образом:
SELECT  CONVERT(varchar(MAX), [RowLog Contents 0]), 
	CONVERT(varchar(MAX), [RowLog Contents 1]), 
	CONVERT(varchar(MAX), [RowLog Contents 2]), 
	CONVERT(varchar(MAX), [RowLog Contents 3]), 
	CONVERT(varchar(MAX), [RowLog Contents 4]),
	CONVERT(varchar(MAX), [RowLog Contents 5])
	FROM sys.fn_dblog
		(NULL, NULL)
WHERE operation IN
   ('LOP_INSERT_ROWS') and [Transaction ID] = '0000:001496ee' ;
  • Вопрос задан
  • 217 просмотров
Решения вопроса 1
tsklab
@tsklab Куратор тега Transact-SQL
Здесь отвечаю на вопросы.
SELECT  [Transaction ID],
  CONVERT(varchar, [RowLog Contents 0]), 
  CONVERT(varchar, [RowLog Contents 1]), 
  CONVERT(varchar, [RowLog Contents 2]), 
  CONVERT(varchar, [RowLog Contents 3]), 
  CONVERT(varchar, [RowLog Contents 4]),
  CONVERT(varchar, [RowLog Contents 5])
FROM sys.fn_dblog (NULL, NULL)
WHERE operation = 'LOP_INSERT_ROWS'
Работает. А у вас?
Или вас не устраивают получаемые CONVERT(varchar, [RowLog Contents 0])? В сети есть ответ:
Для каждого типа транзакций используются разные столбцы, для того, чтобы получить нужную вам информацию вы должны точно знать какие столбцы используются для каких транзакций, а сделать это не просто, так, как официальной документации с описанием нет.
Вставленные и удаленные строки хранятся в шестнадцатеричных значениях. Для того, чтобы вытащить данные из этих значений вы должны знать формат хранения, понимать биты состояний, знать общее количество столбцов и так далее.


данные в hex значении мне не понятны
В сети есть описание структур [RowLog Contents 0], например: Forensics или Decoding a Simple Update Statement Within the Tran... и пр.

Если вам нужны только цифры бит без префикса используйте CONVERT(VARCHAR,[RowLog Contents 0],2).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы