मैं एक प्रश्न के साथ परेशान हूं।अनन्य पहचानकर्ता के साथ डाली गई अंतिम पंक्ति को पुनर्प्राप्त करें कि यह पहचान नहीं है
मैं अंतिम पंक्ति डेटाप्रकार UniqueIdentifier स्तंभ के साथ एक कॉलम के साथ एक मेज में जोड़ा पता लगाने के जरूरत है: aspnet_Applications.ApplicationId नोट: यह UniqueIdentifier यह कॉलम नहीं और पहचान स्तंभ है।
मैं भी पिछले पंक्ति सम्मिलित लेने के लिए और एक अलग तालिका aspnet_Users.ApplicationId
मैं एमएस एसक्यूएल 2008 में SCOPE_IDENTITY उपयोग करने के लिए कोशिश की, लेकिन क्योंकि SCOPE_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()
);
+1 रास्ते में उपयोगी डीडीएल के लिए। –
हालांकि (आईएमओ) आपको अद्वितीय पहचानकर्ताओं की आवश्यकता नहीं है (पहचान कॉलम नौकरी करेगा और आपको बेहतर प्रदर्शन देगा), GUID के साथ भी यदि आप SET @MyIdentity = NewSequentialID() का उपयोग करते हैं तो आप क्लस्टर प्राथमिक कुंजी प्राप्त कर सकते हैं। आप IDS कॉलम के लिए डिफ़ॉल्ट मान के रूप में NewSequentialID() का भी उपयोग कर सकते हैं और मार्टिन द्वारा प्रस्तावित OUTPUT कथन का उपयोग करके डाले गए मान प्राप्त कर सकते हैं। – Niikola