下面顯示的代碼,除其他事項外,用於在數據庫中的所有觸發器的源代碼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'
問題是如果觸發源代碼的長度更超過4,000個字符,它會跨越sys.syscomments中的兩條記錄。
因此,例如,如果觸發源是4,700個字符,它將分佈在sys.syscomments中的2條記錄中。第一個記錄中的sys.syscomments.TEXT長度爲4,000,而其餘的700個字符將被放入另一個記錄。
這對我造成了問題,因爲我試圖比較兩個數據庫之間的完整觸發源代碼。
這看起來像是一些奇怪的行爲。我錯過了什麼嗎?有沒有不同的方式來獲得避免這個問題的源代碼?
由於提前,
可以更好地問上DBA。 –
你可以嘗試使用'object_definition(so.object_id)'而不是加入syscomments,我沒有測試過它,但它可能不會限制在4000 –