odpowiednik SUSPEND z firebird w MSSQL
Sowiecki Agent - 11-05-2007 12:31
odpowiednik SUSPEND z firebird w MSSQL
Witam! Utworzylem kursorw procedurze, i przechodzac po kolei przez rekordy danego zapytania, jezlei spelnia warunek zostaja wrzucone do wynikowego zestawu procedury. W Firebird w takim przypadku wystarczylo dopisac polecenie SUSPEND, jak to wyglada w mssql?
Powiedzmy ze mam taki kod:
set nocount on;
DECLARE petelka CURSOR
for select id from jakas tam tabela
OPEN petelka FETCH NEXT FROM petelka INTO @v_id WHILE @@FETCH_STATUS = 0
begin
//tu pokolei z roznych tablic wyniki pobieram i przetwarzam //w koncu wynik laduje w zmiennej @zmienna //i teraz jezeli @zmienna > 0 to ma dodac @v_id do wynikowego zestawu //danych, jak to zrobic?
FETCH NEXT FROM petelka INTO @v_id end CLOSE petelka DEALLOCATE petelka
set nocount off;
end GO
-- http://www.niesfornazyta.pl/ Pierwszy stacjonarny czytnik for typu phpBB/phpBBbyPrzemo (windows/linux) Od dziś możesz korzystać z fora tak jak z usenetu !
Sowiecki Agent - 11-05-2007 12:31
zdaje sie ze osiagne to zameinaijac procedure na funkcje;
-- http://www.niesfornazyta.pl/ Pierwszy stacjonarny czytnik for typu phpBB/phpBBbyPrzemo (windows/linux) Od dziś możesz korzystać z fora tak jak z usenetu !
Gsue - 11-05-2007 12:31
Użytkownik "Sowiecki Agent" <przemyslaw.rokicki.tnij@tnijtnijkochanietnij.gaze ta.pl> napisał w wiadomości news:evvsmn$7nv$1@inews.gazeta.pl... > zdaje sie ze osiagne to zameinaijac procedure na funkcje; > > > > -- > http://www.niesfornazyta.pl/ > Pierwszy stacjonarny czytnik for typu phpBB/phpBBbyPrzemo (windows/linux) > Od dziś możesz korzystać z fora tak jak z usenetu !
Witam, masz 'słuszną' rację. Wykorzystaj table returning function.
Pozdrawiam Gsue
wloochacz - 11-05-2007 12:31
[ciach] > Witam, > masz 'słuszną' rację. Wykorzystaj table returning function. Można, ale nie trzeba (a czasem się NIE DA; próbuj wykorzystać getdate() w funkcji MSSQL). Się można zdziwić, ale w MSSQL to się po prostu select robi i już dane są "na zewnątrz: ;-)
<sql> declare @tab table(zmienna int)
DECLARE petelka CURSOR for select id from jakas tam tabela
OPEN petelka FETCH NEXT FROM petelka INTO @v_id WHILE @@FETCH_STATUS = 0
begin //tu pokolei z roznych tablic wyniki pobieram i przetwarzam //w koncu wynik laduje w zmiennej @zmienna //i teraz jezeli @zmienna > 0 to ma dodac @v_id do wynikowego zestawu //danych, jak to zrobic? if @zmienna > 0 insert into @tab(zmienna) values(@zmienna)
FETCH NEXT FROM petelka INTO @v_id end CLOSE petelka DEALLOCATE petelka
select * from @tab
</sql>
-- wloochacz
Sowiecki Agent - 11-05-2007 12:31
wloochacz napisał(a): > [ciach] >> Witam, >> masz 'słuszną' rację. Wykorzystaj table returning function. > Można, ale nie trzeba (a czasem się NIE DA; próbuj wykorzystać getdate() > w funkcji MSSQL). Się można zdziwić, ale w MSSQL to się po prostu select > robi i już dane są "na zewnątrz: ;-) > > <sql> > declare @tab table(zmienna int) > > DECLARE petelka CURSOR > for select id from jakas tam tabela > > OPEN petelka > FETCH NEXT FROM petelka INTO @v_id > WHILE @@FETCH_STATUS = 0 > > begin > //tu pokolei z roznych tablic wyniki pobieram i przetwarzam > //w koncu wynik laduje w zmiennej @zmienna > //i teraz jezeli @zmienna > 0 to ma dodac @v_id do wynikowego zestawu > //danych, jak to zrobic? > if @zmienna > 0 > insert into @tab(zmienna) values(@zmienna) > > FETCH NEXT FROM petelka INTO @v_id > end > CLOSE petelka > DEALLOCATE petelka > > select * from @tab > > </sql>
heh, dzieki, wws.pl tez napisal gosc ze funkcje odroznia to ze moze zwracaczestawy danych. Tak czy siak zrobilem juz funkcje wczoraj i dziala, ale rzeczywiscie problem si epojawi gdy bede musial wywyolywac funkcje typu getdate z tejze funkcji. A czy mozna wywolywac z poziomu UDF-a procedure napisana wczesniej ? UDF ma to dobre ze mozna wybierac z niej dane w zwyklym zpytaniu select (tak jak procedury w firebird).
P.
-- http://www.niesfornazyta.pl/ Pierwszy stacjonarny czytnik for typu phpBB/phpBBbyPrzemo (windows/linux) Od dziś możesz korzystać z fora tak jak z usenetu !
wloochacz - 11-05-2007 12:31
[ciach] > heh, dzieki, wws.pl tez napisal gosc ze funkcje odroznia to ze moze > zwracaczestawy danych. Się nie znają :P
> Tak czy siak zrobilem juz funkcje wczoraj i > dziala, ale rzeczywiscie problem si epojawi gdy bede musial wywyolywac > funkcje typu getdate z tejze funkcji. No więc właśnie... poczytaj sobie o ograniczeniach UDF w BoL; a funkcje typu getdate, są to funkcje, które zwracają dane niedeterministyczne - takie kretyńskie ogranicznie MSSQL... Ale... można to obejść (przyznaję się, dowiedziałem się o tym niedawno ;-). trzeba sobie zdefiniować widok i używć widoku w UDF zamiast funkcji; np. tak:
CREATE VIEW get_date AS SELECT getdate() as GET_DATE GO
CREATE FUNCTION dbo.udf_get_date() RETURNS datetime AS begin return (select A.GET_DATE from get_date A) end GO
> A czy mozna wywolywac z poziomu UDF-a procedure napisana wczesniej ? > UDF ma to dobre ze mozna wybierac z niej dane w zwyklym zpytaniu select > (tak jak procedury w firebird). Dokładnie; MSSQLowe UDF to taki sparametryzowany widok, można by powiedzieć... Działa wszystko co w select, a więc where, join, itd.
-- wloochacz
Gsue - 11-05-2007 12:31
Użytkownik "wloochacz" <wl@no.spam> napisał w wiadomości news:f028a4$8pn$1@atlantis.news.tpi.pl... > [ciach] >> heh, dzieki, wws.pl tez napisal gosc ze funkcje odroznia to ze moze >> zwracaczestawy danych. > Się nie znają :P > <CIACH> Masz rację. Słuszną :(
Pozdrawiam, zasmucony, że nie powiedział całej prawdy
Gsue
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Zdalny =?ISO-8859-2?Q?dost=EAp_do_MSSQL_bez_zarz=B1dzani?==?ISO-8859-2?Q?a?=
[MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?=
[MSSQL 2k] - jak =?ISO-8859-2?Q?pod=B3=B1czy=E6_serwer_na_?==?ISO-8859-2?Q?porcie_innym_ni=BF_1433=3F?=
MSSQL Express czy Oracle Express
MSSQL 2005 i uruchamianie procedury o =?ISO-8859-2?Q?okre=B6lone?==?ISO-8859-2?Q?j_godzinie?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
[MSSQL 2000] =?ISO-8859-2?Q?wywo=B3anie_procesu_z_poziomu_?==?ISO-8859-2?Q?job=27a?=
[MSSQL 2K] =?ISO-8859-2?Q?Wp=B3yw_ustawie=F1_regionalnych_?==?ISO-8859-2?Q?serwera_na_zapytania?=
Pobierananie danych z innej bazy danych w MSSQL
Migracja MSSQL 2005 CTP na 2005 Express
zanotowane.pldoc.pisz.plpdf.pisz.plred-hacjenda.opx.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 |
|