Welcome to Sign in | Help
in Search

Insert

Last post 08-13-2008, 9:38 AM by ignatandrei. 23 replies.
Page 1 of 2 (24 items)   1 2 Next >
Sort Posts: Previous Next
  •  08-11-2008, 5:01 PM 5471

    Insert

    Salut. Ma poate ajuta cineva cu o procedura de insert ?

    Am urmatoarea problema.
    am un xml trimis ca parametru la baza de date ceva gen :
    <Selected Item>
    <Language Id="1" />
    <Language Id="2" />
    ..............................
    <Location Id="1" />
    <Location Id="3" />
    ..............................
    <Type Id="2" />
    <Type Id="5" />
    ..............................
    </Selected Item>
    si un JobId="x";

    acum tot ce trebuie sa fac este sa adaug in tabela Language valorile:
     
    Jobid=x Language=1
    JobId=x Language=2
    ................................
    JobId=x Location=1
    JobId=x Location=3
    ................................
    Jobid=x Type =2
    JobId=x Type=5
    ................................

    si tot asa.
    Ideea este ca primesc un xml si trebuie sa fac asociez id fiecarui nod din xml si sa il adaug intr-o tabela.
    Vreo idee stralucica si simplu de utilizat?
  •  08-11-2008, 5:25 PM 5472 in reply to 5471

    Re: Insert

    Incearca OPENXML sau daca lucrezi cu SQL 2005 / 2008 metoda nodes() (---> tipul de date xml). Vezi BOL si

    http://sqlserver.ro/forums/post/2636.aspx

     

  •  08-11-2008, 6:18 PM 5473 in reply to 5472

    Re: Insert

    Poate nu m-am facut inteles :D ... dar pentru mine problema nu este cum iau informatia din xml.Stiu cum sa iau informatia din xml dar atunci cand o iei cu un select iti returneaza o tabela cu mai multe informatii si eu vreau sa iau fiecare informatie si sa fac cate un insert
     
    as vrea ceva de genu :

    foreach (xmlnode node in Language)
    insert into Language (JobId,LanguageId) values("x",node.value)

    foreach (xmlnode node in Location)
    insert into Location(JobId,LanguageId) values("x",node.value)


    as putea face aceste inserturi din code behind si sa trimiti valorile ca parametru dar atunci m-as conecta de prea multe ori la baza de date si nu mi se pare eficient.

  •  08-12-2008, 12:49 AM 5474 in reply to 5473

    Re: Insert

    <Lista>
        <Language ID="1"/>
        <Language ID="2"/>
        <Location ID="3"/>
        <Location ID="4"/>
        <Type     ID="5"/>
        <Type     ID="6"/>
        <Type     ID="7"/>
    </Lista>


    CREATE PROCEDURE InsereazaPestiMarinati
      @x XML,
      @id INT
    AS

    INSERT INTO tblJobLanguage
    SELECT @id AS JobID, Tabela.Info.VALUE('@ID', 'int') AS LanguageID
    FROM @x.nodes('//Lista/Language') Tabela(Info)

    INSERT INTO tblJobLocation
    SELECT @id AS JobID, Tabela.Info.VALUE('@ID', 'int') AS LocationID
    FROM @x.nodes('//Lista/Location') Tabela(Info)

    INSERT INTO tblJobType
    SELECT @id AS JobID,  Tabela.Info.VALUE('@ID', 'int') AS LanguageID
    FROM @x.nodes('//Lista/Type') Tabela(Info)

    Vrei ca inserarea sa se realizeze mai simplu / dintr-un singur INSERT ?
  •  08-12-2008, 10:13 AM 5475 in reply to 5474

    Re: Insert

    Multumesc. Exact asta cautam. Un insert cu select :D si nu stiam de existenta lui.

    Multumesc foarte mult :D
  •  08-12-2008, 10:22 AM 5476 in reply to 5475

    Re: Insert

    Si inca o intrebare daca se poate . Am tot cautat pe net cum se face o cheie primara compusa dar ma tem ca nu stiu  exact ce sa caut.

    Daca am o tabela cu
    NUME
    PRENUME
    si vreau o cheie primara compusa cum as face?
    Multumesc anticipat.
  •  08-12-2008, 10:47 AM 5477 in reply to 5476

    Re: Insert

    tebbaerty:
    Si inca o intrebare daca se poate . Am tot cautat pe net cum se face o cheie primara compusa dar ma tem ca nu stiu  exact ce sa caut.

    Daca am o tabela cu
    NUME
    PRENUME
    si vreau o cheie primara compusa cum as face?
    Multumesc anticipat.

    E gresit sa formezi cheia primara din NUME si PRENUME deoarece pot exista (si chiar exista) persoane cu acelasi NUME si PRENUME asemănarea putând să fie chiar până la nivelul INITŢIALELOR tatălui. Trebuie sa gasesti alt identificator pentru persoane. De exemplu CNP-ul , asta daca sunt doar romani !

    O cheie primară compusă poate fi definită astfel

    CREATE TABLE Factura
    (
    Serie VARCHAR(10) NOT NULL,
    Nr INT NOT NULL,
    Data DATETIME NOT NULL
    )
    GO

    ALTER TABLE Factura
    ADD CONSTRAINT Factura_PK PRIMARY KEY (Serie,Nr)
    GO

    ------------------------------------------------

    INSERT INTO Factura VALUES ('A',1,'2008-01-01')
    INSERT INTO Factura VALUES ('A',1,'2008-02-02')
    GO


    (1 row(s) affected)

    Server: Msg 2627, Level 14, State 1, Line 1
    Violation of PRIMARY KEY constraint 'Factura_PK'. Cannot insert duplicate key in object 'Factura'.
    The statement has been terminated.

    ------------------------------------------------

    SELECT * FROM Factura
    GO

    A    1    2008-01-01 00:00:00.000

  •  08-12-2008, 10:53 AM 5478 in reply to 5476

    Re: Insert

    In primul rand , o "smecherie" care ajuta mult daca vrei imediat sa vezi cum arata o comanda CREATE sau ALTER pe un obiect existent:

    click dreapta pe obiect in interfata--> Script <object> as --> Create, Alter etc  --> in memorie sau pe alt ecran

    Iata cum arata comanda de creare table cu o cheie primara compusa:

    CREATE TABLE [ab](

    Beer [nchar](10) NOT NULL,

    Angel [int] IDENTITY(1,1) NOT NULL,

    CONSTRAINT [PK_ab] PRIMARY KEY CLUSTERED

    (

    Beer ASC,

    Angel ASC

    )

    Cheia primara compusa aici este formata din coloanele a si b si se introduce prin constrangerea respectiva

    In al doilea rand atentie la proiectarea schemei bazei de date : de obicei se evita combinatia nume+ prenume pt ca nu asigura unicitatea datelor (s-ar putea ca Ion Popescu sa fie numele si prenumele mai multor persoane)


    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
  •  08-12-2008, 11:11 AM 5479 in reply to 5478

    Re: Insert

    "Smecheria" aceea o stiam si eu :D dar nu aveam model de cheie primara.
     Asta cu nume prenume era doar de exemplu eu pun cheie primara compusa pe altceva.
    MULTUMESC FOARTE MULT :D.
    Faceti o treaba excelenta. Tineti-o tot asa :D YesBig SmileYes
  •  08-12-2008, 12:54 PM 5480 in reply to 5479

    Re: Insert

    Cu CNP sau SSN pe post de cheie primara poti avea probleme, vezi

    http://sqlserver.ro/forums/post/5106.aspx

  •  08-12-2008, 1:03 PM 5481 in reply to 5480

    Re: Insert

    Diana:

    Cu CNP sau SSN pe post de cheie primara poti avea probleme, vezi

    http://sqlserver.ro/forums/post/5106.aspx


    Mai precis, la ce probleme te referi ?
  •  08-12-2008, 1:04 PM 5482 in reply to 5479

    Re: Insert

    tebbaerty:
    "
     Asta cu nume prenume era doar de exemplu eu pun cheie primara compusa pe altceva.

    Nu am avut nevoie in general de PK compusa, ci de fiecare data adaugarea unui surogat ( identity, guid)  s-a dovedit de folos ( in BD si in aplicatie ...)
    Poti sa faci index pe coloane daca vrei sa iti ajute cautarea ...

    Ignat Andrei
    http://serviciipeweb.ro/iafblog
  •  08-12-2008, 3:19 PM 5483 in reply to 5481

    Re: Insert

    B_gd_n[ ]Sahlean:
    Diana:

    Cu CNP sau SSN pe post de cheie primara poti avea probleme, vezi

    http://sqlserver.ro/forums/post/5106.aspx


    Mai precis, la ce probleme te referi ?

    Prefer sa evit situatiile prezentate in link-ul de mai sus.

  •  08-12-2008, 4:24 PM 5484 in reply to 5482

    Re: Insert

    ignatandrei:
    tebbaerty:
    "
     Asta cu nume prenume era doar de exemplu eu pun cheie primara compusa pe altceva.

    Nu am avut nevoie in general de PK compusa, ci de fiecare data adaugarea unui surogat ( identity, guid)  s-a dovedit de folos ( in BD si in aplicatie ...)
    Poti sa faci index pe coloane daca vrei sa iti ajute cautarea ...


    Problema e ca daca folosesc un identity atunci acesta in scurt timp va ajunge la o valoare imensa.
    Imagineazati o baza de data in care se sterg si se adauga elemente de foarte multe ori.
    cel putin asa gandesc eu :-?

  •  08-12-2008, 6:27 PM 5485 in reply to 5484

    Re: Insert

    Vezi BOL ---> Data Types (int, bigint).
Page 1 of 2 (24 items)   1 2 Next >
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems