T-SQL: OUTPUT Clause INSERTED

T-SQL: OUTPUT Clause INSERTED

In questo mini tutorial vi voglio illustrare come ottenere in T-SQL la Primary Key del record appena aggiunto ad una tabella tramite INSERT.

In questo tutorial utilizzerò due tabelle diverse:

  • mail_key_int: la Primary Key sarà di tipo int
  • guid: la Primary Key sarà di tipo uniqueidentifier

Ora basta perdersi in descrizioni e partiamo con gli script T-SQL.

Primary Key int

La tabella utilizzata per questa prova ha la seguente struttura dati

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[mail_key_int](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[email] [nchar](200) NOT NULL,
 CONSTRAINT [PK_mail_key_int] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH 
    (
        PAD_INDEX = OFF, 
        STATISTICS_NORECOMPUTE = OFF, 
        IGNORE_DUP_KEY = OFF, 
        ALLOW_ROW_LOCKS = ON, 
        ALLOW_PAGE_LOCKS = ON, 
        OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF
    ) ON [PRIMARY]
) ON [PRIMARY]
GO

Ora possiamo procedere ad effettuare la INSERT

1
2
3
INSERT INTO mail_key_int(email) 
    OUTPUT inserted.Id
VALUES('mail@mail.mail')

Nella query precedente avrete notato la presenza di OUTPUT inserted.PrimaryKeyColumnName e sarà proprio questa clausola a fornirci il valore associato al campo ID del record appena inserito.

In alternativa, trattandosi di un campo INT potrete usare anche la classica sintassi per ottenere la chiave appena generata

1
2
INSERT INTO mail_key_int(email) VALUES('mail@mail.mail')
SELECT @@IDENTITY 

Primary Key UNIQUEIDENTIFIER

La tabella utilizzata per questa prova ha la seguente struttura dati

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[mail_key_guid](
	[Id] [uniqueidentifier] NOT NULL,
	[email] [nchar](200) NULL,
 CONSTRAINT [PK_mail_key_guid] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH 
    (
        PAD_INDEX = OFF, 
        STATISTICS_NORECOMPUTE = OFF, 
        IGNORE_DUP_KEY = OFF, 
        ALLOW_ROW_LOCKS = ON, 
        ALLOW_PAGE_LOCKS = ON, 
        OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF
    ) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[mail_key_guid]
    ADD  CONSTRAINT [DF_mail_key_guid_Id]  
    DEFAULT (newid()) FOR [Id]
GO

Ora possiamo procedere ad effettuare la INSERT

1
2
3
INSERT INTO mail_key_guid(email) 
OUTPUT inserted.Id
VALUES('mail@mail.mail')

Anche in questo caso, la presenza di OUTPUT inserted.PrimaryKeyColumnName ci fornirà il valore associato al campo ID del record appena inserito.