Подтвердить что ты не робот

Как обновить сборку и ее зависимые сборки в MS-SQL?

В этой ситуации:

У меня есть Trigger.dll и Trigger.XmlSerializer.dll.

Я использую CREATE ASSEMBLY для регистрации их в MSSQL.

Теперь я скомпилировал новые версии обоих.

Я хочу использовать ALTER ASSEMBLY для их обновления, однако вы можете обновлять только по одному. Если вы попытаетесь обновить тот, у которого есть зависимость, он жалуется. Какая уловка для этого?

Я не хочу бросать и воссоздавать, как я должен, затем удалить все триггеры и т.д., и есть время простоя базы данных.

4b9b3361

Ответ 1

в соответствии с поддержкой microsoft вы можете использовать его с помощью трюка.

Примечания

  • Эти шаги обновляют или понижают ассемблер A в сценарии, описанном в разделе "Как обновить или понизить сборку".
  • В этом примере предполагается, что версии двух сборок равны 1.0.0.0, а сборки оба написаны на С#. Когда вы выполните следующие действия, попробуйте обновить сборку A и сборку B до версии 2.0.0.0.

Чтобы обновить или понизить страницу сборки A, выполните следующие действия.

  • Резервное копирование версии 1.0.0.0 сборки B в папку.
  • Измените, а затем перекомпилируйте сборку B до версии 2.0.0.0.
  • Используйте инструкцию ALTER ASSEMBLY для обновления сборки B в SQL Server 2005.
  • Измените, а затем перекомпилируйте сборку A до версии 2.0.0.0. Когда вы это сделаете, обратитесь к версии 1.0.0.0 сборки B из резервной копии, сделанной на шаге 1. Для этого используйте инструмент компилятора Csc.exe вместе с переключателем /reference. Например, используйте следующую команду: csc/target: library/out:AssemblyA.dll AssemblyA.cs AssemblyInfo.cs/reference: "BackupFolder\AssemblyB.dll" Примечание. Чтобы проверить версию сборки B в метаданных сборки A, откройте сборку A с помощью утилиты Ildasm.exe. Затем проверьте информацию метаданных для ссылочной сборки в разделе MANIFEST.
  • Используйте инструкцию ALTER ASSEMBLY для обновления сборки A в SQL Server 2005.

Ответ 2

Я боюсь сбросить таблицу и воссоздать ее, это единственный способ.

Основной причиной этого является то, что значения, хранящиеся в типе в сборке, непригодны для использования при обновлении сборки до новой версии.

Ответ 3

Два предложения:

1) Как правило, вы можете избежать зависимостей, используя ILMerge для их внедрения и интернализации. Поэтому в большинстве случаев достаточно выполнить команду alter assembly. Я еще не пробовал, что сам еще с SQLCLR, но я бы от него отказался.

2) Возможно, сборки сериализации XML не нужны? В этой статье предлагается, что это необходимо только при вызове внешних веб-сервисов внутри SQL Server. Сам по себе сомнительный дизайн, если вы не являетесь одним из тех людей, которые хотят размещать все ваши бизнес-сервисы внутри продукта MS SQL Server, вместо того, чтобы просто писать собственные автономные службы в Windows (гораздо проще в установке, управлении и обслуживании) т.е. больше шаблона n-уровня, чем "уровень данных делает все" анти-шаблон. Поскольку ваша DLL называется Triggers.dll, она не предлагает объявлять какие-либо типы или является прокси-сервером веб-службы. Если я пропустил какую-либо другую причину использовать XML-сериализаторы, то достаточно справедливым, пожалуйста, уточните это из интереса.