sql – 检索与Uniqueidentifier一起插入的最后一行,它不是IDENTITY

前端之家收集整理的这篇文章主要介绍了sql – 检索与Uniqueidentifier一起插入的最后一行,它不是IDENTITY前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我对一个查询感到困惑.

我需要找到一个表中添加的LAST行,其中包含一个数据类型为Uniqueidentifier的列
专栏是:
aspnet_Applications.ApplicationId
注意:此列Uniqueidentifier不是和IDENTITY列.

我还需要插入最后一行并在另一个表上更新它
aspnet_Users.ApplicationId

我尝试在MS sql 2008中使用SCOPE_IDENTITY但不起作用,因为SCOPE_IDENTITY仅适用于IDENTITY列.

在这里我的代码.有任何想法吗?

CREATE DATABASE Test;
GO
USE Test;
GO

-- Create entities
CREATE TABLE [dbo].[aspnet_Applications](
    [ApplicationName] [nvarchar](256) NOT NULL,[LoweredApplicationName] [nvarchar](256) NOT NULL,[ApplicationId] [uniqueidentifier] NOT NULL,[Description] [nvarchar](256) NULL,PRIMARY KEY NONCLUSTERED 
(
    [ApplicationId] ASC
)WITH (PAD_INDEX  = OFF,STATISTICS_NORECOMPUTE  = OFF,IGNORE_DUP_KEY = OFF,ALLOW_ROW_LOCKS  = ON,ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY],UNIQUE NONCLUSTERED 
(
    [LoweredApplicationName] ASC
)WITH (PAD_INDEX  = OFF,UNIQUE NONCLUSTERED 
(
    [ApplicationName] ASC
)WITH (PAD_INDEX  = OFF,ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[aspnet_Applications] ADD  DEFAULT (newid()) FOR [ApplicationId]
GO


CREATE TABLE [dbo].[aspnet_Users](
    [ApplicationId] [uniqueidentifier] NOT NULL,[UserId] [uniqueidentifier] NOT NULL,[UserName] [nvarchar](256) NOT NULL,[LoweredUserName] [nvarchar](256) NOT NULL,[MobileAlias] [nvarchar](16) NULL,[IsAnonymous] [bit] NOT NULL,[LastActivityDate] [datetime] NOT NULL,PRIMARY KEY NONCLUSTERED 
(
    [UserId] ASC
)WITH (PAD_INDEX  = OFF,ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[aspnet_Users]  WITH CHECK ADD FOREIGN KEY([ApplicationId])
REFERENCES [dbo].[aspnet_Applications] ([ApplicationId])
GO

ALTER TABLE [dbo].[aspnet_Users] ADD  DEFAULT (newid()) FOR [UserId]
GO

ALTER TABLE [dbo].[aspnet_Users] ADD  DEFAULT (NULL) FOR [MobileAlias]
GO

ALTER TABLE [dbo].[aspnet_Users] ADD  DEFAULT ((0)) FOR [IsAnonymous]
GO

-- Add data
DECLARE @MyIdentity binary(16);
INSERT INTO dbo.aspnet_Applications
(
    ApplicationName,LoweredApplicationName,Description
)
VALUES
(
    'x','x','Dummy text'
);
SET @MyIdentity = SCOPE_IDENTITY(); -- DOES NOT WORK
PRINT @MyIdentity; -- DOES NOT WORK

INSERT INTO dbo.aspnet_Users
(
    ApplicationId,UserName,LoweredUserName,MobileAlias,IsAnonymous,LastActivityDate
)
VALUES
(   
    @MyIdentity,'Administrator','administrator','',sysutcdatetime()
);

解决方法

这是一个更多的工作,但对于您的插入,即使您已经在ApplicationID上有一个DEFAULT值,您可以这样做:
DECLARE @MyIdentity uniqueidentifier;
SET @MyIdentity = NewID();
INSERT INTO dbo.aspnet_Applications
(
    ApplicationName,ApplicationId,@MyIdentity,'Dummy text'
);

SELECT @MyIdentity

基本上,您事先设置了GUID,因此您已经知道要插入的内容.

原文链接:/mssql/77940.html

猜你在找的MsSQL相关文章