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
)

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


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


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;

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.