Salve,
a mio parere la domanda e' sia ambigua che non completa...
al di la' di cio', ovviamente avendo un'entita' definita ad esempio come
oggetto {[Id] tipo_dato (PK) | [Attributo1] tipo_dato | [Attributo2] tipo_dato | [Attributo3] tipo_dato | [barcode] char(13) NULL }
possiamo sicuramente da un'entita' esistente forzare la generazione di una nuova riga/entita', passando tutti gli attributi dell'entita' gia' esistente, forzando NULL per l'attributo [barcode] (ovviamente questo nel DDL deve essere impostato in tal senso), MA forzando una nuova PK, sia esso ad esempio un valore intero (magari quindi ottenendola con identity), o uno uniqueidentifier (magari quindi utilizzando NEWID()), quindi utilizzando questa valorizzazione per ottenere una nuova riga...
dopo l'inserimento della nuova riga, SQL Server e' in grado ad esempio di dirti il valore dell'ultimo identity generato con SCOPE_IDENTITY() [
https://docs.microsoft.com/it-it/sql/t-sql/functions/scope-identity-transact-sql?view=sql-server-ver15 ], mentre per NEWID(), nel caso lo generi tu al momento dell'insert non hai problema di riottenerlo in quanto l'lhai generato tu, similarmente a
DECLARE @newId uniquidentifier = NEWID();
INSERT INTO .... ( [Id], ...., [barcode] )
VALUES ( @newId, ....., NULL );
mentre nel caso tu abbia definito un default constraint per "autopopolare" la colonna tipo ad esempio
CREATE .... (
[Id] uniqueidentifier DEFAULT NEWID(),
[Attributo1] int NOT NULL
);
potrai recuperare il valore generato automaticamente dalla chiamata del default utilizzando la clausola OUTPUT... la cosa e' un po' piu' arzigogolata ma tendenzialmente semplice:
DECLARE @lastId uniqueidentifier = NULL;
DECLARE @op TABLE (
ColGuid uniqueidentifier
);
INSERT INTO [dbo].[testTB] ( [Attributo1] )
OUTPUT inserted.[Id]
INTO @op
VALUES ( 1 );
SELECT @lastId = o.[ColGuid]
FROM @op o;
SELECT t.[Id], t.[Attributo1], @lastId AS [Id Recuperata e ritornabile al chiamante]
FROM [dbo].[testTB] t;
il valore di @lastId e' quindi ritornabile al chiamante per referenziare la riga "clonata" in questo senso...
questo con chiavi primarie surrogate e generabili automaticamente dal sistema, mentre se utilizzi altro "tipo" di chiavi primarie, va analizzato come queste siano composte...
saluti omnia
--
Andrea