2010-08-25 10 views
5

Chcę zbudować skrypt zmiany T-SQL, który wprowadza zmiany w bazie danych z dev do przetestowania na produkcję. Mam skrypt podzielić na trzy części:T-SQL 2005: łączenie wielu wywołań procedury create/alter w jednej transakcji

  1. DDL
  2. zmiany procedur składowanych (tworzenie i zmianę postępowania)
  3. tworzenia danych i modyfikacje

Chcę wszystkie z zmiany w tych trzech skryptach, które należy wprowadzić w transakcji. Wszystkie zmiany w skrypcie są przetwarzane lub - po błędzie - wszystkie zmiany są wycofywane. Udało mi się to zrobić dla kroków 1 i 3 za pomocą polecenia try/catch i rozpocząć instrukcje transakcji. Moim problemem jest teraz zrobić to samo dla procedur przechowywanych. Wywołanie "rozpocznij transakcję" bezpośrednio przed instrukcją "create procedura składowana" powoduje błąd składni informujący mnie, że "instrukcja procedury alter/create musi być pierwszą instrukcją wewnątrz partii zapytania". Więc zastanawiam się, jak mogę połączyć wiele instrukcji procedury create/alter w jednej transakcji.

Każda pomoc jest bardzo mile widziane ;-)

Dzięki

Odpowiedz

0

Spróbuj tego:

begin transaction 
    go 
    create procedure foo as begin select 1 end 
    go 
commit transaction 
0
BEGIN TRANSACTION 
BEGIN TRY 
    -- Do your stuff here 
    COMMIT TRANSACTION 

    PRINT 'Successfull.' 

END TRY 
BEGIN CATCH 

    SELECT 
     ERROR_NUMBER() as ErrorNumber, 
     ERROR_MESSAGE() as ErrorMessage; 

    ROLLBACK TRANSACTION 

END CATCH 
0

spróbuj umieścić kroki w pracy

2

Można użyć dynamicznego SQL stworzyć swoje procedury składowane.

EXEC ('CREATE PROC dbo.foo AS ....`) 

Pozwoli to uniknąć błędu „alter/tworzyć oświadczenia procedura musi być pierwszą instrukcją wewnątrz partii zapytania”

+0

a co, jeśli masz dużą UDP z zapytaniami i tak dużo "znaków? –

+1

@Leandro - Następnie musisz wykonać wyszukiwanie i zamiana, aby uciec '' 'z' '' –

Powiązane problemy