SQL_execute_sp

Transakcja SQL_execute_sp pozwala na uruchamianie dowolnej procedury składowanej w bazie SQL i przekazanie do niej parametrów. Wykorzystanie transakcji i jej zastosowanie zależy od przygotowanych procedur składowanych. Możemy uruchamiać procedury składowane z domyślnej bazy danych (ROOT) lub dowolnie wskazanej (CUSTOM), dzięki czemu wdorżeniowiec lub programista może przygotować spersonalizowane rozwiązania i działania na bazie danych.

Uruchomienie

Uruchomienie transakcji /role_sys/SQL_execute_sp.aspx wymaga podania parametrów. Przykładowo:

/role_sys/SQL_execute_sp.aspx?sp=sp_del_x_zestawienia&connection=softwarestudioConnectionString&$REFNO=

pozwala na wykonanie procedury składowanej do usuwania zdefiniowanych widoków oraz powiązanych kolumn dla tych zestawień.

Parametry

Parametr sp

wymagany parametr sp wskazuje na nazwę procedury składowanej, która ma zostać uruchomiona.

Parametr connection

opcjonalny parametr wskazujący na nazwę połączenia do bazy SQL, którą należy wykorzystać, domyślnie następuje połączenie z bazą ROOT (softwarestudioConnectionString)

Parametry przekazywane do procedury składowanej

Ponieważ w zależności do wybranej procedury może występować potrzeba przekazania parametru lub wielu parametrów, program pozwala przekazać listę tych parametrów wg następującej zasady. Każdy parametr rozpoczynający się od znaku at (@) lub znaku dolar($) zostanie przekazany do procedury składowanej. Przykładowo, jeżeli w procedurze składowanej mamy zdefiniowany parametr o nazwie REFNO ($REFNO) to należy przy uruchamianiu podać parametr $REFNO=123

Parametr @KTO

Przekazując do transakcji parametr @KTO program podmieni wartość @KTO na nazwę zalogowanego użytkownika i taką wartość jako parametr przekaże do procedury składowanej. Np. w procedurze chcemy mieć login użytkownika jako @LOGIN, to uruchamiając transakcję podajemy parametr @LOGIN=@KTO. Do procedury zostanie wysłana wartość np. AdamS do parametru @LOGIN.

W takim wypadku program odczyta parametr $REFNO i przekaże do procedury parametr REFNO oraz jego wartość 123.

Parametr caption

Parametr caption pozwala przekazać treść komunikatu, jaki chcemy wyświetlić użytkownikowi przed wykonaniem procedury. Jeżeli parametr nie jest podany to procedura jest uruchamiana automatycznie (bez pytania użytkownika o zgodę na jej wykonanie). Jeżeli parametr podamy to program wyświetli ten komunikat oraz przycisk OK, po kliknięciu zostanie uruchomiona procedura składowana.

SQL_sp_execute

Po potwierdzeniu, jeżeli procedura wykona się poprawnie wyświetlony zostanie komunikat:

SQL_sp_execute_OK

PRZYKŁAD 1

W bazie danych mamy procedurę składowaną o nazwie sp_del_x_zestawienia, procedura usuwa rekordy z tabel x_zestawienia oraz x_zestawienia_kolumny dla wskazanych pozycji REFNO za pomocą parametru @REFNO.

BEGIN TRANSACTION;

BEGIN TRY
DELETE FROM x_zestawienia WHERE REFNO=@REFNO
DELETE FROM x_zestawienia_kolumny WHERE REFNO=@REFNO
END TRY

BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
END CATCH;

IF @@TRANCOUNT > 0
COMMIT TRANSACTION;
END

W programie ustawiamy uruchomienie transakcji z poziomu j_grid.aspx

/role_sys/SQL_execute_sp.aspx?sp=sp_del_x_zestawienia&@REFNO=

gdzie na końcu system automatycznie doda symbol (wartość) REFNO, które chcemy usunąć.

PRZYKŁAD 2

W bazie danych mamy procedurę składowaną o nazwie sp_menu_copy, procedura kopiuje rekord w ramach tabeli _menu na podstawie identyfikatora wiersza – parametr @ID_X_SHORTCUT.

[dbo]

.[sp_menu_copy]
@ID_X_SHORTCUT varchar(20)
AS
BEGIN
SET NOCOUNT ON;

BEGIN TRANSACTION;

BEGIN TRY

INSERT INTO [_menu]
(
[ACH]
,[ROLA]
,[PRX]
,[TYPDOK]
,[GRUPA]
,[NAME]
,[TEKST]
,[SEKCJAFRAMEWORK]
,[IMAGE]
,[IMAGE32]
,[IMAGE48]
,[IMAGEFRAMEWORK]
,[TOOLTIP]
,[TARGETURL]
,[GOFUNCTION]
,[GOVIEW]
,[KTO]
,[KOLEJNOSC]
,[POZX]
,[POZY]
,[AKTYWNE]
,[KIEDY]
,[WIDOCZNE]
,[TARGETPARAMETERS]
,[DIALOGBOX]
,[DIALOGBOXSIZE]
,[DIALOGBOXREFRESH]
,[SYSTEMOWE]
,[IKONA]
,[BACKCOLOR]
,[IMAGE24]
,[ZAPYTANIESQL]
,[ZAPYTANIECONNECTION]
,[SZEROKOSC]
,[WYSOKOSC]
,[ZAPYTANIETEKST]
,[WARUNEKWIDOCZNOSCI]
)
SELECT TOP(1)
[ACH]
,[ROLA]
,[PRX]
,[TYPDOK]
,[GRUPA]
,[NAME]
,[TEKST]
,[SEKCJAFRAMEWORK]
,[IMAGE]
,[IMAGE32]
,[IMAGE48]
,[IMAGEFRAMEWORK]
,[TOOLTIP]
,[TARGETURL]
,[GOFUNCTION]
,[GOVIEW]
,[KTO]
,[KOLEJNOSC]
,[POZX]
,[POZY]
,[AKTYWNE]
,[KIEDY]
,[WIDOCZNE]
,[TARGETPARAMETERS]
,[DIALOGBOX]
,[DIALOGBOXSIZE]
,[DIALOGBOXREFRESH]
,[SYSTEMOWE]
,[IKONA]
,[BACKCOLOR]
,[IMAGE24]
,[ZAPYTANIESQL]
,[ZAPYTANIECONNECTION]
,[SZEROKOSC]
,[WYSOKOSC]
,[ZAPYTANIETEKST]
,[WARUNEKWIDOCZNOSCI]
FROM [_menu]
WHERE ID_X_SHORTCUT=@ID_X_SHORTCUT
END TRY

BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
END CATCH;

IF @@TRANCOUNT > 0
COMMIT TRANSACTION;
END

Ustawiamy w programie wywołanie:

role_sys/SQL_execute_sp.aspx?sp=sp_menu_copy&caption=Czy skopiować ustawienia bieżącej pozycji ?&refno=1&@ID_X_SHORTCUT=

program wyświetli komunikat z pytaniem: „Czy skopiować ustawienia bieżącej pozycji ?” po potwierdzeniu uruchomiona zostaje procedura, która skopiuje rekord przekazany jako parametr @ID_X_SHORTCUT.

Uwaga: ponieważ chcemy przekazać na końcu wartość identyfikatora wiersza tabeli j_grid to w wywołaniu konieczny jest parametr o nazwie REFNO, dlatego w wywołaniu dodany jest parametr refno=1, którego jedynym zadaniem jest powiadomić transakcję j_grid, że chcemy dodać id wiersza tabeli (w naszym wypadku identyfikatorem jest unikalna wartość kolumny ID_X_SHORTCUT).