---
title: "Dubbla @@IDENTITY i procedur"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/165807-dubbla-identity-i-procedur"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "ironhead"
published: "2007-10-25T06:28:33.000Z"
updated: "2007-10-25T09:45:18.000Z"
replies: 15
views: 504
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/165807-dubbla-identity-i-procedur"
---

# Dubbla @@IDENTITY i procedur

## #1 — ironhead, 2007-10-25T06:28Z

Hej alla glada!

Jag har ett problem med en procedur. Har 4 INSERT som jag vill plocka ut 2 olika ID från. DBMS = MSSQL 2000. Fälten i de 2 tabellerna innehåller både räknare och är satt till "Primary key".

```
CREATE PROCEDURE dbo.Test1
(
@var1 varchar(50),
@var2 varchar(50),
@var3 varchar(50),
@var4 varchar(50)
)
AS

SET NOCOUNT ON

BEGIN
INSERT INTO tbl1 (var1) VALUES(@var1)
INSERT INTO tbl2 (tbl1ID, var2)
SELECT @@IDENTITY, @var2
END

BEGIN
INSERT INTO tbl3 (var3) VALUES(@var3)
INSERT INTO tbl4 (tbl3ID, var4)
SELECT @@IDENTITY, @var4
END

GO
```

Från den första "INSERT" in i "tbl2" kan jag få tag på det nya ID:t men i den andra (tbl4) blir det bara "null".

Jag tycks ha testat det mesta som:

```
SELECT @@IDENTITY

DECLARE @newid int
SELECT @newid = SCOPE_IDENTITY()

SET @newid = @@IDENTITY

SELECT SCOPE_IDENTITY()

SELECT IDENT_CURRENT('tbl3')
```

...en får inget att fungera :(

Hur är det man ska skriva?

Permalänk: https://www.webforum.nu/p/165807

## #2 — Gein, 2007-10-25T06:34Z

Det ser ut som att du avslutar proceduren lite för tidigt. Skriv ihop dina INSERT i ett och samma block.

```
CREATE PROCEDURE dbo.Test1
(
@var1 varchar(50),
@var2 varchar(50),
@var3 varchar(50),
@var4 varchar(50)
)
AS

SET NOCOUNT ON

BEGIN
INSERT INTO tbl1 (var1) VALUES(@var1)
INSERT INTO tbl2 (tbl1ID, var2)
SELECT @@IDENTITY, @var2

INSERT INTO tbl3 (var3) VALUES(@var3)
INSERT INTO tbl4 (tbl3ID, var4)
SELECT @@IDENTITY, @var4
END

GO
```

Permalänk: https://www.webforum.nu/p/2044205

## #3 — ironhead, 2007-10-25T07:14Z

Får fortfarande "null" vid andra @@IDENTITY :(

Har det betydelse att den andra "omgången" dvs. tbl13 och tbl4 ligger i en annan databas?

Permalänk: https://www.webforum.nu/p/2044216

## #4 — Gein, 2007-10-25T07:16Z

ehm, jaha.
Ändra till 

```
INSERT INTO tbl3 (var3) VALUES(@var3)
OUTPUT INSERTED.*
INSERT INTO tbl4 (tbl3ID, var4)
SELECT @@IDENTITY, @var4
```

och så testkör du proceduren och ser vad den spottar ut sig vid inserten till tbl3.
Har du provat köra PRINT @@IDENTITY efter andra insert i felsökningssyfte?

Permalänk: https://www.webforum.nu/p/2044218

## #5 — Gein, 2007-10-25T07:18Z

> **ironhead skrev:**
>
> Får fortfarande "null" vid andra @@IDENTITY :(
> 
> Har det betydelse att den andra "omgången" dvs. tbl13 och tbl4 ligger i en annan databas?

Ligger tbl3 och tbl4 i en annan databas? Isåfall lär ju inte din procedur fungera över huvud taget.

Permalänk: https://www.webforum.nu/p/2044220

## #6 — ironhead, 2007-10-25T07:30Z

Trodde inte att det hade nån betydelse att det var olika databaser.

Ska försöka förklara.

Proceduren ligger under en databas som vi kan kalla db1.
I denna procedur gör jag en del "INSERT" i db1.

Sedan gör jag en INSERT i "db2" som är en databas som ligger på samma server med dock en annan databas.

så långt fungerar det bra. Jag får ut min @@IDENTITY.

Problemet uppkommer när jag i samma procedur kopplar upp mig mot en databas på en annan server. "db3" (Alias - länkad server)...det är här jag inte får ut nån @@IDENTITY. All annan data funkar bra.

Permalänk: https://www.webforum.nu/p/2044221

## #7 — ironhead, 2007-10-25T07:33Z

Jag får fel på 

```
OUTPUT INSERTED.*
```

Incorrect syntax near OUTPUT

Permalänk: https://www.webforum.nu/p/2044222

## #8 — Gein, 2007-10-25T07:36Z

Okej, kolla syntaxen på INSERT så ser du hur du använder OUTPUT. Den kan visa dig vilka rader som stoppades in i INSERT-uttrycket.
Men fungerar din INSERT i tbl3 bra? Dvs ser du att en ny rad hamnar i tabellen, bara det att du inte får ut någon identity?

Permalänk: https://www.webforum.nu/p/2044223

## #9 — ironhead, 2007-10-25T07:40Z

> **Gein skrev:**
>
> Men fungerar din INSERT i tbl3 bra? Dvs ser du att en ny rad hamnar i tabellen, bara det att du inte får ut någon identity?

Japp!

Permalänk: https://www.webforum.nu/p/2044224

## #10 — ironhead, 2007-10-25T07:51Z

Försöker skriva såhär:

```
BEGIN
INSERT INTO tbl3 (tbl3) 
output Inserted.tbl3Id
VALUES(@var3)
INSERT INTO tbl4 (tbl3ID, tbl4)
SELECT @@IDENTITY, @var4
END
```

...men får det inte att funka

Ska man inte bara ange det cell-värde man vill ha ut?

Permalänk: https://www.webforum.nu/p/2044228

## #11 — Gein, 2007-10-25T08:06Z

My mistake! OUTPUT kom först i SQL Server 2005.

Permalänk: https://www.webforum.nu/p/2044235

## #12 — ironhead, 2007-10-25T08:28Z

näe, mitt misstag....den 3dje databasen ligger på en MSSQL 2005 :-/
...men fattar fortfarande inte syntaxen :(

Permalänk: https://www.webforum.nu/p/2044243

## #13 — ironhead, 2007-10-25T09:01Z

aha! Jag tänker mig inte för....output kommer inte att fungera iom att proceduren ligger på en MSSQL 2000 :-/

Skulle det hjälpa då om jag delar upp den sista inserten i en procedur i MSSQL2005 och anropar den från procedur 1?

Permalänk: https://www.webforum.nu/p/2044252

## #14 — Gein, 2007-10-25T09:18Z

Det är möjligt att det skulle fungera. Jag tänkte främst på OUTPUT i felsökningssyfte men du skulle faktiskt även kunna använda den istället för @@IDENTITY.

Typ såhär

```
DECLARE @tempTabell (
  Id int PRIMARY KEY,
  ...
  ...
)
INSERT INTO tabell
OUTPUT INSERTED.* INTO @tempTabell
SELECT (....)
```

Sedan kör du typ

```
SELECT Id FROM @tempTabell
```

för att få ut motsvarande @@IDENTITY.

Däremot känns som att du kanske borde hitta problemet med @@IDENTITY istället, det ska ju fungera. Testa anropa en procedur på databasen som ligger på MS SQL 2005 och kolla om @@IDENTITY fungerar i den proceduren.

Permalänk: https://www.webforum.nu/p/2044253

## #15 — ironhead, 2007-10-25T09:28Z

Har lagt över tbl3 & tbl4 på en procedur på MSSQL2005 servern och anropar den från MSSQL200, men får detta fel:

```
Server 'mssql2005' is not configured for RPC
```

Jag har kört:

```
EXEC sp_serveroption 'mssql2005', 'RPC', 'ON'
```

men får samma felmeddelande.
Är det på 2000 servern eller 2005:an man ska köra denna kod?

Permalänk: https://www.webforum.nu/p/2044256

## #16 — ironhead, 2007-10-25T09:45Z

Tror jag fick iordning på det nu :D

Jag körde:

```
exec sp_serveroption MSSQL2005, 'rpc', true
exec sp_serveroption MSSQL2005, 'rpc out', true
```

på MSSQL2000, och nu får jag plötsligt alla id:n jag ville ha :D

Tack så hemskt mycket för ditt tålamod och din hjälpsamhet, Gein :)

Permalänk: https://www.webforum.nu/p/2044265

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/165807-dubbla-identity-i-procedur
