Jump to content

AngelOfEffekt

Members
  • Gesamte Inhalte

    2
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt von AngelOfEffekt

  1. Hi,

    ich habe einen Trigger, der auf insert und update reagiert.

     

    Wenn eine ID angegeben ist, soll diese gesucht werden und bei fund soll dieser datensatz geupdated werden. sonst gibts einen ganz neuen Datensatz mit der id.

     

    klappt bei insert, bei update nur teilweise. Und zwar dahingehend, dass (was zwar logisch, aber hinderlich ist) bei einer id, die noch nicht vorhanden ist, keine daten im Inserted stehen.

     

    Gibt es allgemein eine Möglichkeit, an die 'Roh'-Daten des Insert- oder Update-Befehls zu kommen?

     

    Hier mal kurz mein bsp-Code.

     

    tabelle testtabelle (id int, name char)
    
    create trigger trGamesInsteadInsertUpdate on testtabelle
    instead of insert, update as
    begin
    declare @new varchar(50)
    declare @old varchar(50)
    declare @id tinyint
    declare @count tinyint
    set @new = (select name from inserted);
    set @id = (select id from inserted);
    set @count = (select COUNT(*) from testtabelle where id = @id)
    if(@count > 0) begin
    	update testtabelle
    	set name = @new
    	where id = @id
    	set @old = (select name from deleted);
    end else begin
    	insert into testtabelle values (@id, @new)
    end
    select @new, @old, @id
    end
    
    insert into testtabelle (id, name) values (
    0,N'neu'
    --Klappt
    
    update testtabelle
    set name = N'hehe'
    where id =N'0'
    --klappt auch
    
    
    update testtabelle
    set name = N'hehe'
    where id =N'0'
    --klappt nicht, da keine Änderung vollzogen worden wäre...
    )

  2. Hallo,

     

    wir haben im Untericht das Thema Seitenreservierung pro Tabelle.

     

    Dazu hier mal fix n kleines Bsp.:

     

    create table Kunde(
    kid smallint not null,
    k_name char(50) not null,
    k_adresse1 char(50) not null,
    k_adresse2 char(50) not null,
    k_wohnort char(50) not null,
    k_bundesland char(2) not null,
    k_plz char(10) not null,
    k_telefon char(20) not null,
    k_fax char(20) not null,
    k_email char(30) not null,
    k_homepage char(20) not null
    )

     

    Das sind dann also 304 Byte + 10Byte je Zeile

       (9 Spalten mit char)	= 300Byte
    + 1 Spalte  mit smallint=    2Byte
    + 1 Spalte  mit char(2)	=     2Byte
    		   304Byte
    + 10Byte je Zeile (null-Bitmap  & Header

     

    Die Seitenreservierung soll nun 8096/314 = 25,78 Seiten)

     

    Dh. wenn ich eine sehr kleine Tabelle (zB. Hilfstabelle für NM-Beziehung)

    create table klein (
    hid smallint not null,
    aid smallint not null,
    mid int not null
    )

    2*2 + 4 + 10 = 18Byte

    8096 / 18 = 449,7...7Seiten

     

    So hat uns das unser Dozent erklärt.

     

    Jetzt meine Frage: Worin liegt hier der Hintergrund. Warum reserviert der Server bei kleinen Tabellen automatisch mehr Seiten?

     

    LG AoE

×
×
  • Neu erstellen...