Avatar billede esbenp Nybegynder
06. februar 2007 - 01:22 Der er 11 kommentarer og
1 løsning

problemer med @@identity

Hvordan får jeg @@identity ud fra den her query. Jeg skal have max værdien før jeg indsætter noget i tabellen, men der er @@identity null og jeg kan ikke umildbart finde ud af have 2 SELECT. Her er sætningen:

BEGIN TRANSACTION SELECT    MAX(val) AS MAX1
FROM t5 INSERT INTO t5(name, val)
VALUES    ('ABCDEFG', 510) COMMIT TRANSACTION
Avatar billede arne_v Ekspert
06. februar 2007 - 01:25 #1
BEGIN TRANSACTION
SELECT MAX(val) AS max1 FROM t5
INSERT INTO t5(name, val) VALUES ('ABCDEFG', 510)
SELECT @@IDENTITY AS ident
COMMIT TRANSACTION

burde vel virke (bemærk at du får 2 result set tilbage)
Avatar billede esbenp Nybegynder
06. februar 2007 - 01:39 #2
Ja det har jeg også prøvet. Når jeg kører den får jeg kun MAX1. Hvordan får jeg ident ud?
Avatar billede arne_v Ekspert
06. februar 2007 - 01:45 #3
den henter du fra næste result set
Avatar billede esbenp Nybegynder
06. februar 2007 - 01:52 #4
Kan du være lidt mere specifik? Har prøvet at lave en SqlDataReader og køre Read() på den 2 gange og har også prøvet at lave 2 kald til ExecuteReader() men det virker heller ikke
Avatar billede arne_v Ekspert
06. februar 2007 - 01:54 #5
jeg har et lille eksempel !
Avatar billede arne_v Ekspert
06. februar 2007 - 01:54 #6
CREATE PROCEDURE getall AS

SELECT * FROM t1 WHERE f1 % 2 = 0

SELECT * FROM t1 WHERE f1 % 2 = 1

GO
Avatar billede arne_v Ekspert
06. februar 2007 - 01:54 #7
using System;
using System.Data;
using System.Data.SqlClient;

class MainClass
{
    public static void Main(string[] args)
    {
        SqlConnection con = new SqlConnection("server=ARNEPC2;Integrated Security=SSPI;database=Test");
        con.Open();
        SqlCommand cmd = new SqlCommand("getall", con);
        cmd.CommandType = CommandType.StoredProcedure;
        SqlDataReader rdr = cmd.ExecuteReader();
        Console.WriteLine("lige f1:");
        while(rdr.Read())
        {
            Console.WriteLine(rdr[0] + " " + rdr[1]);
        }
        rdr.NextResult();
        Console.WriteLine("ulige f1:");
        while(rdr.Read())
        {
            Console.WriteLine(rdr[0] + " " + rdr[1]);
        }
        rdr.Close();
        con.Close();
    }
}
Avatar billede arne_v Ekspert
06. februar 2007 - 01:55 #8
rdr.NextResult();

skifter readeren til næste result set, hvor man så starter "forfra"
Avatar billede esbenp Nybegynder
07. februar 2007 - 18:13 #9
Tak.

Jeg fandt BeginTransaction() på SqlConnection. Er det equivalent? Jeg synes BeginTransaction virker simplere at bruge
Avatar billede arne_v Ekspert
07. februar 2007 - 18:22 #10
det mener jeg
Avatar billede esbenp Nybegynder
07. februar 2007 - 23:06 #11
fint nok. Smid et svar
Avatar billede arne_v Ekspert
07. februar 2007 - 23:13 #12
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester