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.
Links