我对查询感到困惑。
我需要找出添加到表中的最后一行,该表的数据类型为Uniqueidentifier列为:aspnet_Applications.ApplicationId注意:此列Uniqueidentifier不是NOT和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, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY], UNIQUE NONCLUSTERED ( [ApplicationName] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 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, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 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', '', 0, sysutcdatetime() );
这需要做更多的工作,但是对于您的插入,即使您在ApplicationID上已经具有DEFAULT值,也可以执行以下操作:
DECLARE @MyIdentity uniqueidentifier; SET @MyIdentity = NewID(); INSERT INTO dbo.aspnet_Applications ( ApplicationName, LoweredApplicationName, ApplicationId, Description ) VALUES ( 'x', 'x', @MyIdentity, 'Dummy text' ); SELECT @MyIdentity
本质上,您预先设置了GUID,因此您已经知道要插入的内容。