SQL EXPRESS - procedura skladowana
CYSTERNA - 01-05-2006 00:02
SQL EXPRESS - procedura skladowana
Mam procedurkę, która dodaje do tabeli firmy 1 wiersz
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER procedure [dbo].[AddFirma] @IDF numeric(18,0), @Nazwa nVARCHAR(255) as INSERT INTO [DBTEST].[dbo].[Firmy] ([ID_FIRMY],[Nazwa]) VALUES (@IDF ,@Nazwa)
Problem w tym ze musze przeslać wartośc ID (niepowtarzalna) a chcialbym aby ta procedurka sprawdzala jaka jest maksymalna wartość w polu ID w tabeli Firmy i dodawala do niej 1. Jak to zrobic najszybciej?? Teraz mam inna procedurke ktora zwraca maksymalne ID ale to nie jest chyba najlepsze rozwiazanie, poniewaz wywoluje jedna procedurkę i mam z niej ID i dopiero pozniej wywoluje druga procedurke a chcialbym zrobic to w jednej.
Co trzeba dopisac do tej procedurki zeby wrzucic do zmiennej wynik zapytania (SELECT TOP 1 ID FROM ...Firmy ODRER BY ID DESC). Nie wiem jak to zrobic.
Pozdrawiam
Sirtap - 02-05-2006 00:38
Użytkownik "CYSTERNA" <e.cysterna@wp.pl> napisał w wiadomości news:e333lr$nku$1@nemesis.news.tpi.pl... > Mam procedurkę, która dodaje do tabeli firmy 1 wiersz > > set ANSI_NULLS ON > set QUOTED_IDENTIFIER ON > go > ALTER procedure [dbo].[AddFirma] > @IDF numeric(18,0), > @Nazwa nVARCHAR(255) > as > INSERT INTO [DBTEST].[dbo].[Firmy] > ([ID_FIRMY],[Nazwa]) > VALUES > (@IDF ,@Nazwa) > > Problem w tym ze musze przeslać wartośc ID (niepowtarzalna) a chcialbym > aby ta procedurka sprawdzala jaka jest maksymalna wartość w polu ID w > tabeli Firmy i dodawala do niej 1. Jak to zrobic najszybciej?? Teraz mam > inna procedurke ktora zwraca maksymalne ID ale to nie jest chyba najlepsze > rozwiazanie, poniewaz wywoluje jedna procedurkę i mam z niej ID i dopiero > pozniej wywoluje druga procedurke a chcialbym zrobic to w jednej. > > Co trzeba dopisac do tej procedurki zeby wrzucic do zmiennej wynik > zapytania (SELECT TOP 1 ID FROM ...Firmy ODRER BY ID DESC). Nie wiem jak > to zrobic. > > Pozdrawiam
Może chodzi co o coś takiego:
BEGIN INSERT INTO KSIAZKI (Tytul_ks, Rok_ks, Opis_ks, Wydawca_ks, Ilosc_str_ks) VALUES (pTytul, pRok, pOpis, pWydawca, pStrony);
SET varKsId = (SELECT MAX(Id_ks) FROM KSIAZKI); //... END;
W Sybase identyfikatory autoincrement nigdy się nie cofają, więc nawet jak usunie się środkowe wiersze, to nowy id będzie największym.
PS. Dobrze, że zadałeś te pytanie bo... pamiętałem że coś takiego zrobiłem w swoim projekcie, ale jak chciałem znaleźć ten kod, to okazało się, że na jego miejscu jest stara funkcja, która nie działała dobrze (nie wiem gdzie zginął poprawiony kod). Tz. pomogłeś mi znaleźć bug'a ;)
Pozdrawiam Andrew
Tadeusz Olszewski - 02-05-2006 00:38
Użytkownik "CYSTERNA" <e.cysterna@wp.pl> napisał w wiadomości news:e333lr$nku$1@nemesis.news.tpi.pl... > Mam procedurkę, która dodaje do tabeli firmy 1 wiersz > > set ANSI_NULLS ON > set QUOTED_IDENTIFIER ON > go > ALTER procedure [dbo].[AddFirma] > @IDF numeric(18,0), > @Nazwa nVARCHAR(255) > as > INSERT INTO [DBTEST].[dbo].[Firmy] > ([ID_FIRMY],[Nazwa]) > VALUES > (@IDF ,@Nazwa) > > Problem w tym ze musze przeslać wartośc ID (niepowtarzalna) a chcialbym > aby ta procedurka sprawdzala jaka jest maksymalna wartość w polu ID w > tabeli Firmy i dodawala do niej 1. Jak to zrobic najszybciej?? Teraz mam > inna procedurke ktora zwraca maksymalne ID ale to nie jest chyba najlepsze > rozwiazanie, poniewaz wywoluje jedna procedurkę i mam z niej ID i dopiero > pozniej wywoluje druga procedurke a chcialbym zrobic to w jednej. > > Co trzeba dopisac do tej procedurki zeby wrzucic do zmiennej wynik > zapytania (SELECT TOP 1 ID FROM ...Firmy ODRER BY ID DESC). Nie wiem jak > to zrobic. > > Pozdrawiam >
alter procedure [dbo].[AddFirma] @Nazwa nVARCHAR(255) as
declare @id_firmy int set @id_firmy = (SELECT MAX(ID_FIRMY) AS maxID FROM firmy) + 1
INSERT INTO [dbo].[Firmy] ([ID_FIRMY],[Nazwa]) VALUES (@id_firmy ,@Nazwa)
-- Pozdrawiam Tadeusz Olszewski
CYSTERNA - 02-05-2006 00:38
Użytkownik "Tadeusz Olszewski" <olszewski.tadeusz-usun@wp.usun.pl> napisał w wiadomości news:e34hpn$g6l$1@atlantis.news.tpi.pl... > > alter procedure [dbo].[AddFirma] > @Nazwa nVARCHAR(255) > as > > declare @id_firmy int > set @id_firmy = (SELECT MAX(ID_FIRMY) AS maxID FROM firmy) + 1 > > INSERT INTO [dbo].[Firmy] > ([ID_FIRMY],[Nazwa]) > VALUES > (@id_firmy ,@Nazwa) > > > -- > Pozdrawiam > Tadeusz Olszewski
I o to chodzilo. Bardzo Panu dziekuje.
pozdrawiam
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?=
Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?=
=?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?=
[MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?=
=?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?=
Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
=?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?=
[Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?=
=?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?=
zanotowane.pldoc.pisz.plpdf.pisz.pllisinski.htw.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|