Одно из наших собственных приложений имеет сборку 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