Код ниже показывает, среди прочего, исходный код для всех триггеров в базе данныхдлина sys.syscomments.name> 4000
SELECT so.name AS trigger_name,
s.name AS table_schema,
t.name AS table_name,
LEN (sc.[text]) as len,
sc.[text] AS trigger_content
FROM [GDI-193-DEV].dbo.sysobjects so
INNER JOIN [GDI-193-DEV].sys.tables t ON so.parent_obj = t.object_id
INNER JOIN [GDI-193-DEV].sys.schemas s ON t.schema_id = s.schema_id
INNER JOIN [GDI-193-DEV].sys.syscomments sc ON so.id = sc.id
WHERE so.type = 'TR'
Проблема, если длина источника запуска кода больше чем 4000 символов, он заканчивается двумя записями в sys.syscomments.
Так, например, если источник триггера составляет 4700 символов, он будет распространяться на 2 записи в sys.syscomments. sys.syscomments.TEXT в первой записи будет иметь длину 4000, а остальные 700 символов будут помещены в другую запись.
Это вызывает проблемы для меня, поскольку я пытаюсь сравнить полный исходный код запуска между двумя базами данных.
Это похоже на странное поведение. Я что-то упускаю? Есть ли другой способ получить исходный код, который позволяет избежать этой проблемы?
Спасибо заранее,
Может быть лучше спросил на дБА. –
Вы можете попробовать использовать 'object_definition (so.object_id)' вместо того, чтобы присоединяться к syscomments, я не тестировал его, но он, вероятно, не закрывает его на 4000 –