/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
[MSSQL] Indsætte i flere tabeller
Fra : Allan Schuster Bach


Dato : 29-08-03 21:00

Jeg sidder her med et "lille" problem jeg ikke lige ved hvordan jeg skal
gribe an

Problemstilling: Jeg skal foretage en insert i to forskellige tabeller. Den
første tabel, vil der kun skulle indsættes en række, men i den anden table
skal der indsættes x antal rækker, med ID fra den første table

Eksempel på tabel 1
ID(autofelt), Person

Eksempel på tabel 2
løbenr(autofelt), ID fra table, part

En person kan have flere part, og skal derfor stå i tabellen flere gange.

Mulig løsning: Løsningen jeg har tænkt på kunne være følgende. Indsæt først
i table 1. Lave en select, som giver mig ID. Laven en løkke som indsætter de
relevante felter i table 2. Men jeg syntes at den løsning er en smule
omstændig, og der må da være en nemmer

Allan Bach



 
 
Peter Lykkegaard (29-08-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 29-08-03 21:38

Allan Schuster Bach wrote:

> Problemstilling: Jeg skal foretage en insert i to forskellige
> tabeller. Den første tabel, vil der kun skulle indsættes en række,
> men i den anden table skal der indsættes x antal rækker, med ID fra
> den første table

Kik på @@Identity
Og på MSSQL kan du lave en rækkge inserts i den samme statement

mvh/Peter Lykkegaard

mvh/Peter Lykkegaard



Allan Schuster Bach (30-08-2003)
Kommentar
Fra : Allan Schuster Bach


Dato : 30-08-03 11:35

> Kik på @@Identity
> Og på MSSQL kan du lave en rækkge inserts i den samme statement

Tjjj, det virker og virker ikke!

Jeg har følgende SP.
CREATE PROCEDURE [dbo].[SP_OpretBruger]
@Brugernavn varchar(50),
@Stabsnumre varchar(50),
@Createaf varchar (50),
@Identity int output
AS
insert into TB_Bruger (Brugernavn, Stabsnumre, Createaf) values
(@Brugernavn, @Stabsnumre, @Createaf)
SELECT @@IDENTITY AS '@Identity'
GO

Hvis jeg i SQL Query analyzer gør dette her
execute dbo.SP_OpretBruger 'zz','xx','cc',''
bliver der retuneret en @Identity med det korrekte tal.

Hvis jeg prøver det samme i ASP.NET

Dim ObjConn As New
SqlConnection(ConfigurationSettings.AppSettings("DBStreng"))
Dim objDBset As New SqlCommand("SP_OpretBruger", ObjConn)

objDBset.CommandType = CommandType.StoredProcedure

Dim sqlbrugernavn As New SqlParameter("@Brugernavn", SqlDbType.VarChar, 50)
Dim sqlstabsnumre As New SqlParameter("@Stabsnumre", SqlDbType.VarChar, 50)
Dim sqlcreateaf As New SqlParameter("@Createaf", SqlDbType.VarChar, 50)
Dim sqlidentity As New SqlParameter("@Identity", SqlDbType.Int)

sqlbrugernavn.Direction = ParameterDirection.Input
sqlstabsnumre.Direction = ParameterDirection.Input
sqlcreateaf.Direction = ParameterDirection.Input
sqlidentity.Direction = ParameterDirection.Output

objDBset.Parameters.Add(sqlbrugernavn)
objDBset.Parameters.Add(sqlstabsnumre)
objDBset.Parameters.Add(sqlcreateaf)
objDBset.Parameters.Add(sqlidentity)

sqlbrugernavn.Value = "Navn"
sqlstabsnumre.Value = "Numre"
sqlcreateaf.Value = "Lille mig"
sqlidentity.Value = ""

ObjConn.Open()

objDBset.ExecuteScalar()
tilbage = objDBset.Parameters("@identity").Value.ToString & "ok"

Resultatet er kun "ok". Jeg få ikke retuneret det tal, og jeg fatter
virkelige ikke hvorfor





Allan Schuster Bach (30-08-2003)
Kommentar
Fra : Allan Schuster Bach


Dato : 30-08-03 16:47

> Jeg har følgende SP.
> CREATE PROCEDURE [dbo].[SP_OpretBruger]
> @Brugernavn varchar(50),
> @Stabsnumre varchar(50),
> @Createaf varchar (50),
> @Identity int output
> AS
> insert into TB_Bruger (Brugernavn, Stabsnumre, Createaf) values
> (@Brugernavn, @Stabsnumre, @Createaf)
> SELECT @@IDENTITY AS '@Identity'
> GO

> Resultatet er kun "ok". Jeg få ikke retuneret det tal, og jeg fatter
> virkelige ikke hvorfor

Har løst mit problem (men ikke ved hjælp af MS dokumentation)
SP skal se således ud
CREATE PROCEDURE [dbo].[SP_OpretBruger]
@Brugernavn varchar(50),
@Stabsnumre varchar(50),
@Createaf varchar (50),
@Identity int output
AS
insert into TB_Bruger (Brugernavn, Stabsnumre, Createaf) values
(@Brugernavn, @Stabsnumre, @Createaf)
set @Identity = (SELECT @@IDENTITY)
return @Identity
GO



Peter Lykkegaard (30-08-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 30-08-03 17:57

Allan Schuster Bach wrote:
> Har løst mit problem (men ikke ved hjælp af MS dokumentation)
[Klip]
> return @Identity

Det er sådan du skal lave det når du har ouput parametre
Det vil du kunne læse dig til i MS's dokumentation

Laver du en alm select til sidst i din SP så skal lede efter dataene i det
recordset der bliver returneret

> GO

Hvad laver den i din SP?
Du bruger den hvis du skal adskille flere kald i fx et SQL script

mvh/Peter Lykkegaard



Jens Gyldenkærne Cla~ (31-08-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 31-08-03 13:12

Peter Lykkegaard skrev:

>> GO
>
> Hvad laver den i din SP?

Den er ikke med i SP'en - den markerer bare afslutningen, ligesom
CREATE PROC-linjen markerer begyndelsen. Den er kun nødvendig hvis
der følger andre sql-kald efter create-kaldet.

> Du bruger den hvis du skal adskille flere kald i fx et SQL
> script

Netop. Visse kald - bl.a. CREATE, ALTER og DROP - skal stå alene i
en batch-kørsel.
--
Jens Gyldenkærne Clausen
Velkommen hen til Paris International!
Rejse, lede og fortolkere. Jeres oven på- kø levere i Paris
nemlig... (<http://www.paris-tours-guides.com/index_danish.shtml>)

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408521
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste