ďťż
 
wyzwalacz w MSSQL , new_id() ďťż
 
wyzwalacz w MSSQL , new_id()
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

wyzwalacz w MSSQL , new_id()



Sowiecki Agent - 01-04-2007 00:03
wyzwalacz w MSSQL , new_id()
  Witam!

Otoz mam <zapewne banalny!> problem.
Posiadam X tabel w bazie, i wszystkie jako pola ID maja ustawione pola
typu uniqueidentifier. W niektorych mam potrzebe manulanie utworzyc pole
ID - np przy dokumentach typu masterdetail, jednak w zdecydowanej
wiekszosci ten numer powinien wpisac sie automatycznie tak jak w
przypadku pola int z opcja identity.
No i teraz nie wiem jak to zrobic, moge sie jedynie domyslac ze
powinienem stworzyc wyzwalacz instead of insert (domyslam sie ze to jest
cos na wzor before insert) . I mojepytanie tutaj brzmi w jaki sposob w
wyzwalaczu wpisac nowa wartosc dla danego pola ?
W Firebird pisalem po prostu NEW.pole = cos tam,
tutaj mam potrzebe napisania

IF (NEW.id_pole IS NULL) THEN
NEW.id_pole = new_id();

oczywiscie takiej skladni nie przyjmuje.
Zalozmy ze tabela jest o nazwie tabela, pole o nazwie pole_id,

prosze o pomoc, googlam i cholery dostaje bo nic konretnego nie moge
znalezc w necie.

Pozdrawiam
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 !





Sylwester Lewandowski - 01-04-2007 00:03

  Sowiecki Agent napisał(a):
> Witam!
>
> Otoz mam <zapewne banalny!> problem.
> Posiadam X tabel w bazie, i wszystkie jako pola ID maja ustawione pola
> typu uniqueidentifier. W niektorych mam potrzebe manulanie utworzyc pole
> ID - np przy dokumentach typu masterdetail, jednak w zdecydowanej
> wiekszosci ten numer powinien wpisac sie automatycznie tak jak w
> przypadku pola int z opcja identity.
> No i teraz nie wiem jak to zrobic, moge sie jedynie domyslac ze
> powinienem stworzyc wyzwalacz instead of insert (domyslam sie ze to jest
> cos na wzor before insert) . I mojepytanie tutaj brzmi w jaki sposob w
> wyzwalaczu wpisac nowa wartosc dla danego pola ?
> W Firebird pisalem po prostu NEW.pole = cos tam,
> tutaj mam potrzebe napisania
>
>
> IF (NEW.id_pole IS NULL) THEN
> NEW.id_pole = new_id();
>
>
>
> oczywiscie takiej skladni nie przyjmuje.
> Zalozmy ze tabela jest o nazwie tabela, pole o nazwie pole_id,
>
> prosze o pomoc, googlam i cholery dostaje bo nic konretnego nie moge
> znalezc w necie.
>
> Pozdrawiam
> P.
>
>

Hej,

Czy musi to isc przez wyzwalacz ?
Moze wystarczy dodac default dla kolumny ID o typie UNIQUEIDENTIFIER ?
Przyklad tabeli :

IF OBJECT_ID('dbo.Tabela') IS NOT NULL
DROP TABLE dbo.Tabela;
GO

CREATE TABLE dbo.Tabela
(
id UNIQUEIDENTIFIER NOT NULL CONSTRAINT PK_Tabela PRIMARY KEY
CONSTRAINT DF_Tabela_id DEFAULT (NEWID()),
col1 CHAR(16) NOT NULL,
col2 INT NOT NULL,
);
GO

Przyklad dodania default, dla istniejacej tabeli:

ALTER TABLE dbo.Tabela
ADD CONSTRAINT DF_Tabela_id DEFAULT (NEWID()) FOR id

lub (tylko dla 2005)

ALTER TABLE dbo.Tabela
ADD CONSTRAINT DF_Tabela_id DEFAULT (NEWSEQUENTIALID()) FOR id

Ta druga opcja sprawia, ze kolejne guidy beda wyzwalane jako nastepujace
po sobie, dzieki temu bedzie potencjalnie mniejsza fragmentacja indeksu.

Pozdr.




Sylwester Lewandowski - 01-04-2007 00:03

 
> Sowiecki Agent napisał(a):

>> IF (NEW.id_pole IS NULL) THEN
>> NEW.id_pole = new_id();

Gdybys jednak musial korzystac z wyzwalacza, ja bym probowal tak:
(nie sprawdzalem, tak tylko "na oko")

IF (inserted.id_pole IS NULL)
inserted.id_pole = NEWID()

Pozdr.




Sowiecki Agent - 01-04-2007 00:03

  Sylwester Lewandowski napisał(a):
>
>> Sowiecki Agent napisał(a):
>
>>> IF (NEW.id_pole IS NULL) THEN
>>> NEW.id_pole = new_id();
>
> Gdybys jednak musial korzystac z wyzwalacza, ja bym probowal tak:
> (nie sprawdzalem, tak tylko "na oko")
>
> IF (inserted.id_pole IS NULL)
> inserted.id_pole = NEWID()
>

dziekuje.

--
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 - 01-04-2007 00:03

 
> Ta druga opcja sprawia, ze kolejne guidy beda wyzwalane jako nastepujace
> po sobie, dzieki temu bedzie potencjalnie mniejsza fragmentacja indeksu.

na chlopski rozum co to oznacza ?

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 !




Sylwester Lewandowski - 03-04-2007 00:07

  Sowiecki Agent napisał(a):
>
>> Ta druga opcja sprawia, ze kolejne guidy beda wyzwalane jako
>> nastepujace po sobie, dzieki temu bedzie potencjalnie mniejsza
>> fragmentacja indeksu.
>
>
> na chlopski rozum co to oznacza ?
>
> P.

Fragmentacja indeksu?

Strony z danymi są przechowywane fizycznie w innym porządku niż
porządek logiczny (np inna kolejność) lub są "puste miejsca" w indeksie
i zajmuje on wiecej miejsca niż powinien.

Pozdr.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • morebeer.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com