search
Japanese Chinese Nederlands Espanol Italiano Deutsch Francais Twitter Rss Feeds
SQL Server GroupsView
SQL Server Ce
SQL Server Clients
SQL Server Clustering
SQL Server Connect
SQL Server Dts
SQL Server Fulltext
SQL Server Integrationsvcs
SQL Server Msde
SQL Server Newusers
SQL Server Olap
SQL Server Programming
SQL Server Replication
SQL Server Reportingsvcs
SQL Server Security
SQL Server Server
SQL Server Setup
SQL Server Tools
SQL Server Xml

Group SummariesView
.NET Framework
Access
BizTalk
Certifications
CRM
DDK
Exchange Server
FoxPro
French
French .NET
Games
German
German .NET
Graphic Design
IIS
Internet
ISA Server
Italian
Italian .NET
Maps
MCIS
Miscellaneous
Mobile Application Development
Money
MSN
Networking
Office
Ops Mgr
Publisher
Security
SharePoint
Small Business
Spanish
Spanish .NET
SQL Server
Systems Management Server
Transaction Server
Virtual PC / Virtual Server
Visual Studio
Win32
Windows 2000
Windows 2003 Server
Windows 7
Windows Live
Windows Media
Windows Update
Windows Vista
Windows XP
 

View All Microsoft SQL Server Programming Posts  Ask A New Question 

Query help please. - LamNguye

Monday, June 02, 2008 5:40 PM

Hi,

I try to run the query below to add the users into the correct role as
before after restore db from production.  I have hundred of databases need to
restore and the trick is to keep the their loginid and their access
permissions are the same as orginal.  Your help is greatly appreciate.

IF OBJECT_ID('Tempdb.dbo.#LoginName', 'u') IS NOT NULL
DROP TABLE #LoginName
GO
CREATE TABLE #LoginName
(
RoleName      VARCHAR(25)    NULL,
members       VARCHAR(35)    NULL,
UserId        INT            NULL
)
GO

-- DELETE #LoginName
INSERT INTO #LoginName VALUES('db_owner', ' ', NULL) INSERT INTO #LoginName
(RoleName, members, UserId) VALUES('', 'MyDomain\AdminPerson ', 1) INSERT
INTO #LoginName (RoleName, members, UserId) VALUES('', 'SQLAdmin ', 2)

INSERT INTO #LoginName VALUES('db_datareader', ' ', NULL) INSERT INTO
INSERT INTO #LoginName (RoleName, members, UserId) VALUES('',
'MyDomain\Lisa', 5) INSERT INTO #LoginName (RoleName, members, UserId)
VALUES('', 'AppUser1', 9) INSERT INTO #LoginName (RoleName, members, UserId)
VALUES('', 'MyDomain\John', 7) INSERT INTO #LoginName (RoleName, members,
UserId) VALUES('', 'MyDomain\Peter', 8)

-----------

INSERT INTO #LoginName VALUES('db_datawriter', ' ', NULL) INSERT INTO
INTO #LoginName (RoleName, members, UserId) VALUES('', 'MyDomain\edituser', 4)

INSERT INTO #LoginName (RoleName, members, UserId) VALUES('', 'SQLBTS', 3)
INSERT INTO #LoginName (RoleName, members, UserId) VALUES('',
'MyDomain\John', 7) INSERT INTO #LoginName (RoleName, members, UserId)
VALUES('', 'MyDomain\Peter', 8) INSERT INTO #LoginName (RoleName, members,
UserId) VALUES('', 'AppUser1', 9) GO

SELECT *
FROM #LoginName
GO

RoleName                  members                             UserId
------------------------- ----------------------------------- -----------
db_owner                                                      NULL
MyDomain\AdminPerson                1
SQLAdmin                            2
db_datareader                                                 NULL
SQLBTS                              3
MyDomain\edituser                   4
MyDomain\Lisa                       5
AppUser1                            9
MyDomain\John                       7
MyDomain\Peter                      8
db_datawriter                                                 NULL
MyDomain\Lisa                       5
MyDomain\edituser                   4
SQLBTS                              3
MyDomain\John                       7
MyDomain\Peter                      8
AppUser1                            9

-- How can I get the result want showing below.

-- Testing...
SELECT 'EXECute sp_addrolemember ''' + RoleName + ''', ''' +  members
+ ''''
FROM #LoginName
ORDER BY 1 ASC
GO

-- Result want:
EXECute sp_addrolemember 'db_datareader', 'AppUser1'
EXECute sp_addrolemember 'db_datawriter', 'AppUser1'
EXECute sp_addrolemember 'db_owner', 'MyDomain\AdminPerson'
EXECute sp_addrolemember 'db_datareader', 'MyDomain\edituser'
EXECute sp_addrolemember 'db_datawriter', 'MyDomain\edituser'
EXECute sp_addrolemember 'db_datareader', 'MyDomain\John'
EXECute sp_addrolemember 'db_datawriter', 'MyDomain\John'
EXECute sp_addrolemember 'db_datareader', 'MyDomain\Lisa'
EXECute sp_addrolemember 'db_datawriter', 'MyDomain\Lisa'
EXECute sp_addrolemember 'db_datareader', 'MyDomain\Peter'
EXECute sp_addrolemember 'db_datawriter', 'MyDomain\Peter'
EXECute sp_addrolemember 'db_owner', 'SQLAdmin'
EXECute sp_addrolemember 'db_datareader', 'SQLBTS'
EXECute sp_addrolemember 'db_datawriter', 'SQLBTS'
reply
 

Query help please. - Q@discussions.microsoft.com

Monday, June 02, 2008 8:36 PM

Change your data as the following and your query will work:
INSERT INTO #LoginName (RoleName, members, UserId) VALUES('db_owner',
'MyDomain\AdminPerson ', 1) INSERT
INTO #LoginName (RoleName, members, UserId) VALUES('db_owner', 'SQLAdmin ', 2)

--INSERT INTO #LoginName VALUES('db_datareader', ' ', NULL)
INSERT INTO #LoginName (RoleName, members, UserId) VALUES('db_datareader',
'SQLBTS', 3)
INSERT INTO #LoginName (RoleName, members, UserId) VALUES('db_datareader',
'MyDomain\edituser', 4)
INSERT INTO #LoginName (RoleName, members, UserId) VALUES('db_datareader',
'MyDomain\Lisa', 5)
INSERT INTO #LoginName (RoleName, members, UserId) VALUES('db_datareader',
'AppUser1', 9)
INSERT INTO #LoginName (RoleName, members, UserId) VALUES('db_datareader',
'MyDomain\John', 7)
INSERT INTO #LoginName (RoleName, members, UserId) VALUES('db_datareader',
'MyDomain\Peter', 8)

-----------

--INSERT INTO #LoginName VALUES('db_datawriter', ' ', NULL)
INSERT INTO #LoginName (RoleName, members, UserId) VALUES('db_datawriter',
'MyDomain\Lisa', 5)
INSERT INTO #LoginName (RoleName, members, UserId) VALUES('db_datawriter',
'MyDomain\edituser', 4)
INSERT INTO #LoginName (RoleName, members, UserId) VALUES('db_datawriter',
'SQLBTS', 3)
INSERT INTO #LoginName (RoleName, members, UserId) VALUES('db_datawriter',
'MyDomain\John', 7)
INSERT INTO #LoginName (RoleName, members, UserId) VALUES('db_datawriter',
'MyDomain\Peter', 8)
INSERT INTO #LoginName (RoleName, members, UserId) VALUES('db_datawriter',
'AppUser1', 9)

Q
reply

Eric,I try to execute this query and it did not work. - LamNguye

Monday, June 02, 2008 8:42 PM

Eric,

I try to execute this query and it did not work.

EXECute sp_addrolemember '', 'MyDomain\AdminPerson '
EXECute sp_addrolemember '', 'SQLAdmin '
EXECute sp_addrolemember '', 'SQLBTS'
EXECute sp_addrolemember '', 'MyDomain\edituser'
EXECute sp_addrolemember '', 'MyDomain\Lisa'
EXECute sp_addrolemember '', 'AppUser1'
EXECute sp_addrolemember '', 'MyDomain\John'
EXECute sp_addrolemember '', 'MyDomain\Peter'
EXECute sp_addrolemember '', 'MyDomain\Lisa'
EXECute sp_addrolemember '', 'MyDomain\edituser'
EXECute sp_addrolemember '', 'SQLBTS'
EXECute sp_addrolemember '', 'MyDomain\John'
EXECute sp_addrolemember '', 'MyDomain\Peter'
EXECute sp_addrolemember '', 'AppUser1'
reply

I am try to run this queries below populate data into temp table and how can I - LamNguye

Monday, June 02, 2008 11:55 PM

I am try to run this queries below populate data into temp table and how can
I run an update correspond to the right group.

SELECT CASE
WHEN (GROUPING(groupuid) = 1 AND GROUPING(memberuid) = 1 )
THEN ' '
WHEN (GROUPING(groupuid) = 0 AND GROUPING(memberuid) = 1 )
THEN CAST(user_name(groupuid) AS VARCHAR(25))
WHEN (GROUPING (groupuid) = 0 AND GROUPING(memberuid) = 0)
THEN ' '
END AS 'Role',
CASE
WHEN (GROUPING (groupuid) = 1 AND GROUPING (memberuid) = 1)
THEN ' '
WHEN (GROUPING (groupuid) = 0 AND GROUPING (memberuid) = 1)
THEN ' '
WHEN (GROUPING (groupuid) = 0 AND grouping(memberuid) = 0)
THEN CAST(user_name(memberuid) AS NVARCHAR(35))
END AS 'members',
CASE
WHEN (GROUPING (groupuid) = 1 AND GROUPING (memberuid) = 1)
THEN NULL
WHEN (GROUPING (groupuid) = 0 AND GROUPING (memberuid) = 1)
THEN NULL
WHEN (GROUPING (groupuid) = 0 AND GROUPING (memberuid) = 0)
THEN (SELECT sid FROM sysusers WHERE uid = memberuid)
END AS 'sid'
FROM sysmembers
GROUP BY groupuid, memberuid
WITH ROLLUP
ORDER BY groupuid ASC, memberuid ASC
go

/*
Role                      members
------------------------- -----------------------------------

db_owner
dbo
db_datareader
Mydomain\Finance
Mydomain\Cristine
HOME\Peter
John
db_datawriter
Mydomain\Cristine
HOME\Peter
John
Mydomain\Finance

*/
reply

Query help please. - Eric Isaacs

Wednesday, June 04, 2008 9:19 PM

Have you tried:

SELECT
'EXECute sp_addrolemember ''' + Role_Name + ''', ''' + members +
''' '
FROM
WHERE
UserID IS NOT NULL

...is that all you need?

Hope that helps!
reply

Yes, I assumed your role_name was populated in #LoginName. - Eric Isaacs

Wednesday, June 04, 2008 9:19 PM

Yes, I assumed your role_name was populated in #LoginName.  If you
follow Q's advice below on how to populate it, it should work.
reply

Previous Microsoft SQL Server Programming conversation.