हम उत्पादन वातावरण में माइग्रेट कर रहे हैं, और मैं एक लिखना चाहता हूं कि डीबीए aspnet_regsql
के साथ जेनरेट की गई स्क्रिप्ट चलाने के बाद तुरंत उपयोगकर्ता के साथ भूमिका बना सकता है। विकास पर्यावरण में, मैं Global.asax.cs में सदस्यता प्रदाता के API के साथ उपयोगकर्ताओं और भूमिकाओं को जोड़ रहा हूं। लेकिन मैं इस कठोर कोडित दृष्टिकोण से बचना चाहता हूं। अब मेरी टी-एसक्यूएल की कमी का अभाव दिख रहा है। मैंने निम्नलिखित लिपि लिखी, जो काम करता है अगर मैं इसे एक साथ नहीं चलाता।SQLMembershipProvider के लिए SQL में उपयोगकर्ताओं और भूमिकाओं को कैसे जोड़ें?
Use MyApps_Prod;
GO
DECLARE @user_identity CHAR(40);
DECLARE @scalar_userid AS NVARCHAR(255);
DECLARE @scalar_roleid AS NVARCHAR(255);
DECLARE @app_id AS NVARCHAR(255);
SET @user_identity = N'AMERICAS\First.Last';
SET @app_id = (SELECT DISTINCT ApplicationId
FROM [dbo].[aspnet_Applications]
WHERE loweredapplicationname = 'MyApplication');
SELECT * FROM [dbo].[aspnet_Users] WHERE UserName = @user_identity
IF NOT EXISTS (SELECT * FROM [dbo].[aspnet_Users] WHERE UserName = @user_identity)
BEGIN
INSERT INTO [dbo].aspnet_Users
([ApplicationId], [UserName], [LoweredUserName], [LastActivityDate])
VALUES
(@app_id, @user_identity, LOWER(@user_identity), GETDATE());
END;
DECLARE @role_name CHAR(40);
SET @role_name = N'Communicator';
IF NOT EXISTS (SELECT * FROM [dbo].[aspnet_Roles] WHERE RoleName = @role_name)
BEGIN
INSERT INTO [dbo].[aspnet_Roles]
([ApplicationId], [RoleName], [LoweredRoleName])
VALUES
(@app_id, @role_name, LOWER(@role_name))
END;
SET @scalar_userid = (SELECT DISTINCT UserID FROM [dbo].aspnet_Users WHERE UserName = @user_identity);
SET @scalar_roleid = (SELECT DISTINCT RoleID FROM [dbo].aspnet_Roles WHERE RoleName = @role_name);
INSERT INTO [dbo].aspnet_UsersInRoles (UserID, RoleID)
VALUES (
@scalar_userid ,
@scalar_roleid
);
SET @role_name = N'AccessAdministrator';
IF NOT EXISTS (SELECT * FROM [dbo].[aspnet_Roles] WHERE RoleName = @role_name)
BEGIN
INSERT INTO [dbo].[aspnet_Roles]
([ApplicationId], [RoleName], [LoweredRoleName])
VALUES
(@app_id, @role_name, LOWER(@role_name))
END;
SET @scalar_roleid = (SELECT DISTINCT RoleID FROM [dbo].aspnet_Roles WHERE RoleName = @role_name);
INSERT INTO [dbo].aspnet_UsersInRoles (UserID, RoleID)
VALUES (
@scalar_userid ,
@scalar_roleid
);
GO
मैं पाया है कि अगर मैं अर्धविराम से प्रत्येक INSERT
अंत है कि मैं INSERTs
प्राप्त कर सकते हैं काम करने के लिए और फिर GO
जोड़ने के लिए, लेकिन फिर मैं redeclare प्रत्येक चर पुन: असाइन करने की जरूरत है।
वास्तविक SQL डेवलपर यह कैसे करेगा?
यदि सब कुछ विफल हो जाता है, तो इसे v1 के लिए global.asax में छोड़ दें और v2 के लिए इसे हटा दें। – Greg