Kembalikan pengidentifikasi unik yang dibuat secara default saat disisipkan


8

Tujuan

Ambil nilai panduan terbaru secara real time setelah Anda memasukkan nilai dalam tabel

Masalah

Tidak tahu bagaimana cara melakukannya

Info

  • Kode seharusnya hanya menentukan nilai baru untuk alamat dan kode pos
  • Mungkin ada banyak data di tabel

Meja

CREATE TABLE [AddressBook]
(
    [testID] [uniqueidentifier] NOT NULL default newid(),
    [address] [nvarchar](50) NULL,
    [zipcode] [nvarchar](50) NULL
)

1
Saya menyarankan menggunakan NEWSEQUENTIALID () daripada NEWID (), jika tidak indeks cluster Anda (dengan asumsi itu akan berada di testID) akan menjadi sangat terfragmentasi.
Jonathan Fite

Jawaban:


13

Saya pikir Anda mencari output

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 mungkin bukan id yang paling efisien di sini, tetapi ini adalah jawaban untuk pertanyaan yang disebutkan


perhatikan bahwa itu INSERTED.[testID]adalah properti dari apa yang Anda inginkan dari baris, bukan nama properti di@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 

Hasil: -59A6D7FE-8C9A-4ED3-8FC6-31A989CCC8DB


Pertanyaannya adalah bagaimana cara mendapatkan nilai yang dihasilkan oleh batasan default. Ini tidak menjawab pertanyaan itu, meskipun itu memberikan solusi
Max Vernon

-4

Cara lain,

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

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

SELECT @id;

Pertanyaannya adalah bagaimana cara mendapatkan nilai yang dihasilkan oleh defaultkendala. Ini tidak menjawab pertanyaan itu, meskipun itu memberikan solusi.
Max Vernon
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.