|
| [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>)
| |
|
|