Renvoie l'identifiant unique généré par défaut lors de l'insertion

8

Objectif

Récupérez la dernière valeur guid en temps réel après avoir inséré la valeur dans le tableau

Problème

Je ne sais pas comment faire

Info

  • Le code ne doit spécifier que de nouvelles valeurs pour l' adresse et le code postal
  • Il peut y avoir beaucoup de données dans le tableau

Table

CREATE TABLE [AddressBook]
(
    [testID] [uniqueidentifier] NOT NULL default newid(),
    [address] [nvarchar](50) NULL,
    [zipcode] [nvarchar](50) NULL
)
KLN
la source
1
Je suggère d'utiliser NEWSEQUENTIALID () plutôt que NEWID (), sinon votre index clusterisé (en supposant qu'il sera sur testID) deviendra fortement fragmenté.
Jonathan Fite

Réponses:

13

Je pense que vous cherchez une sortie

DECLARE @MyTableVar table([testID] [uniqueidentifier]);
 INSERT [AddressBook] ([address], [zipcode])
        OUTPUT INSERTED.[testID] INTO @MyTableVar
 VALUES (N'address', N'zipcode');

--Display the result set of the table variable.
 SELECT [testID] FROM @MyTableVar;

GO

uniqueidentifier n'est peut-être pas l'identifiant le plus efficace ici, mais c'est une réponse à la question posée

paparazzo
la source
notez que INSERTED.[testID]c'est la propriété de ce que vous voulez de la rangée, pas le nom de la propriété en@MyTableVar
smurtagh
-1
CREATE TABLE [dbo].[tbl_Clients](
    [ClientID] [uniqueidentifier] NULL,
    [ClientName] [varchar](250) NULL,
    [ClientEnabled] [bit] NULL
) ON [PRIMARY]

GO

CREATE PROCEDURE [dbo].[sp_ClientCreate]
@in_ClientName varchar(250) = "New Client 123",
@in_ClientEnabled bit,
@out_ClientId uniqueidentifier OUTPUT
AS

SET @out_ClientId = NEWID();

INSERT
INTO tbl_Clients(ClientId, ClientName, ClientEnabled) 
VALUES(
@out_ClientId, 
@in_ClientName,
@in_ClientEnabled)


DECLARE @return_value int,
        @out_ClientId uniqueidentifier

EXEC    @return_value = [dbo].[sp_ClientCreate]
        @in_ClientName = N'111',
        @in_ClientEnabled = 1,
        @out_ClientId = @out_ClientId OUTPUT

SELECT  @out_ClientId as N'@out_ClientId'

SELECT  'Return Value' = @return_value

GO 

Résultat: -59A6D7FE-8C9A-4ED3-8FC6-31A989CCC8DB

AJIT AGARWAL
la source
La question demande comment obtenir la valeur générée par la contrainte par défaut. Cela ne répond pas à cette question, même si cela fournit une solution de contournement
Max Vernon
-4

Autrement,

DECLARE @id varchar(50) = CONVERT(VARCHAR(50), NEWID());

INSERT INTO [yourtable]
( [id])
VALUES
(@id);

SELECT @id;
Shanna
la source
La question demande comment obtenir la valeur générée par la defaultcontrainte. Cela ne répond pas à cette question, même si cela fournit une solution de contournement.
Max Vernon