Назад | Перейти на главную страницу

Извлечение сборки SQLCLR

Одно из наших собственных приложений имеет сборку SQLCLR, которая в настоящее время испытывает проблемы. У разработчика возникают проблемы с воссозданием проблемы с использованием версии, которая хранится в нашей системе управления версиями, поэтому он подозревает, что был выпущен некоторый код, который не был загружен в систему управления версиями. Есть ли способ извлечь сборку SQLCLR в файл .dll, чтобы он мог перепроектировать ее для анализа?

Выход действительно есть - сборки хранятся в sys.assembly_files таблица в вашей базе данных. Выбрать все из sys.assembly_files и найти assembly_id, затем запустите следующий код (изменив assembly_id и SaveToFile сначала путь):

DECLARE @IMG_PATH VARBINARY(MAX)
DECLARE @ObjectToken INT

SELECT @IMG_PATH = content FROM sys.assembly_files WHERE assembly_id = 65536

EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT
        EXEC sp_OASetProperty @ObjectToken, 'Type', 1
        EXEC sp_OAMethod @ObjectToken, 'Open'
        EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @IMG_PATH
        EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, 'D:\SqlServerProject1.dll', 2
        EXEC sp_OAMethod @ObjectToken, 'Close'
        EXEC sp_OADestroy @ObjectToken

Однако для того, чтобы это сработало, вам необходимо включить функцию OLE Automation в настройке контактной зоны для функций в вашем экземпляре SQL.

Я вытащил этот код отсюда:
http://social.msdn.microsoft.com/Forums/en/sqlnetfx/thread/1e00e656-f322-45ec-b4e0-83db748fa97a