我有一个表,主键字段(Id)
有一个newid()在存储过程中我需要将这个新创建的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
答案 0 :(得分:0)
我实际上没有对此进行测试,但如果您使用的是更高版本的SQL Server,则可以使用输出语句:
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
否则,您需要在订阅表上创建一个标识列,然后将其用作查找以选择ID。
答案 1 :(得分:0)
newid()的输出可以转换为字符串值。
使用CAST(NEWID() AS varchar(36))
获取GUID字符串。