2009-02-05 12 views
12

Tak wygląda sytuacja:Jak zaktualizować złożenie i jego zależne złożenia w MS-SQL?

Mam plik Trigger.dll i plik Trigger.XmlSerializer.dll.

Używam CREATE ASSEMBLY, aby zarejestrować je w MSSQL.

Teraz skompilowałem nowe wersje obu.

Chcę użyć ZMIANY MONTAŻU, aby je zaktualizować, ale można aktualizować tylko jeden na raz. Jeśli spróbujesz zaktualizować ten, który ma zależność, to narzeka. Jaka jest tego sztuczka?

Nie chcę upuszczać i odtwarzać, ponieważ muszę usunąć wszystkie wyzwalacze, itd., A także przestój bazy danych.

+0

jaka jest twoja wersja sql? – Avram

Odpowiedz

5

zgodnie z microsoft support można go użyć przez lewę.

Uwagi

  • Te etapy modernizacji lub downgrade montażowej A w scenariuszu, który został opisany w „an Jak upgrade, downgrade montażowej” sekcji.
  • W tym przykładzie założono, że wersje dwóch zestawów to zarówno 1.0.0.0, jak i oba zestawy są napisane w języku C#. Wykonując następujące kroki, próbujesz zaktualizować zespół A i zespół B do wersji 2.0.0.0.

Aby dokonać aktualizacji lub obniżenia wersji zespołu A, wykonaj następujące kroki.

  1. Wykonaj kopię zapasową wersji 1.0.0.0 z zespołu B do folderu.
  2. Modyfikuj, a następnie ponownie skompiluj zespół B do wersji 2.0.0.0.
  3. Skorzystaj z instrukcji ALTER ASSEMBLY, aby zaktualizować zespół B w SQL Server 2005.
  4. Zmodyfikuj, a następnie ponownie skompiluj zespół A do wersji 2.0.0.0. Gdy to zrobisz, odnieś wersję 1.0.0.0 zespołu B z kopii zapasowej wykonanej w kroku 1. Aby to zrobić, użyj narzędzia kompilatora Csc.exe wraz z przełącznikiem/reference. Na przykład użyj następującego polecenia: csc/target: biblioteka/out:AssemblyA.dll AssemblyA.cs AssemblyInfo.cs /reference:"BackupFolder\AssemblyB.dll " Uwaga Aby zweryfikować wersję zespołu B w metadanych zestawu A, otwórz zespół A, używając narzędzia Ildasm.exe. Następnie sprawdź informacje o metadanych dla zespołu referencyjnego w sekcji MANIFEST.
  5. Za pomocą instrukcji ALTER składania Aby uaktualnić montażowej A w SQL Server 2005.
1

Obawiam się, że zrzucenie stołu i ponowne jego utworzenie jest jedynym sposobem.

Głównym powodem tego jest to, że wartości przechowywane w typie w zespole nie nadają się do użytku po zaktualizowaniu zespołu do nowej wersji.

0

dwie sugestie:

1) Ogólnie można uniknąć zależności używając ILMerge osadzać i ich internalizacji. Zatem w większości przypadków oświadczenie o montażu powinno wystarczyć. Jeszcze nie próbowałem tego z SQLCLR, ale dałbym mu szansę.

2) Być może zespoły serializacji XML nie są konieczne?This article suggests it is only necessary when calling external web services inside SQL Server. Sam w sobie wątpliwy projekt, chyba że jesteś jednym z tych ludzi, którzy chcą obsługiwać wszystkie usługi biznesowe w produkcie MS SQL Server, zamiast pisać tylko samodzielne usługi w systemie Windows (znacznie łatwiejszy w instalacji, zarządzaniu i utrzymaniu), tj. bardziej n-poziomowy wzór niż "poziom danych robi wszystko". Ponieważ twoja biblioteka DLL nazywa się Triggers.dll, nie sugeruje zadeklarowania żadnych typów ani nie jest proxy usługi sieciowej. Jeśli przegapiłem jakiś inny powód, by skorzystać z serializatorów XML, to wystarczy, że rozwiążemy ten problem.