Каков наилучший способ вернуть автоматически созданный идентификатор guid? - PullRequest
0 голосов
/ 14 января 2010

У меня есть таблица, в которой есть newid () для поля первичного ключа (Id)

в хранимой процедуре мне нужно вернуть этот вновь созданный guid обратно в качестве параметра возврата, я мог бы заранее создать guid и вставить в базу данных, но это противоречит цели newid (). Есть ли хороший способ справиться с этим?

INSERT INTO [SUBS].[dbo].[Subscriptions]
           ([CustomerId]
           ,[SubscriptionClassId]
           ,[StartDate]
           ,[TrialAmount]
           ,[Amount]
           ,[TrialInterval]
           ,[Interval]
           ,[TrialIntervalLength]
           ,[IntervalLength]
           ,[CreatedBy]
           ,[LastUpdatedBy])
     VALUES
           (@CustomerId
           ,@SubscriptionClassId
           ,@StartDate
           ,@TrialAmount
           ,@Amount
           ,@TrialInterval
           ,@Interval
           ,@TrialIntervalLength
           ,@IntervalLength
           ,@CreatedBy
           ,@CreatedBy)

select @SubscriptionId = SCOPE_IDENTITY() -- this does not work because scope_identity is numeric

Ответы [ 2 ]

0 голосов
/ 16 января 2010

Вывод newid () может быть приведен к строковому значению.

Используйте CAST(NEWID() AS varchar(36)), чтобы получить строку GUID.

0 голосов
/ 14 января 2010

Я на самом деле не проверял это, но если вы используете более позднюю версию SQL-сервера, вы можете использовать выходные операторы:

DECLARE @ins TABLE (id uniqueidentifier)

INSERT INTO [SUBS].[dbo].[Subscriptions] 
           ([CustomerId] 
           ,[SubscriptionClassId] 
           ,[StartDate] 
           ,[TrialAmount] 
           ,[Amount] 
           ,[TrialInterval] 
           ,[Interval] 
           ,[TrialIntervalLength] 
           ,[IntervalLength] 
           ,[CreatedBy] 
           ,[LastUpdatedBy]) 
     OUTPUT INSERTED.id INTO @ins (id)
     VALUES 
           (@CustomerId 
           ,@SubscriptionClassId 
           ,@StartDate 
           ,@TrialAmount 
           ,@Amount 
           ,@TrialInterval 
           ,@Interval 
           ,@TrialIntervalLength 
           ,@IntervalLength 
           ,@CreatedBy 
           ,@CreatedBy) 

select @SubscriptionId = id from @ins

В противном случае вам нужно будет создать столбец идентификаторов в таблице подписок, а затем использовать его в качестве поиска для выбора идентификатора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...