Tuesday, 26 August 2014
SQL server: Get the date of the first Monday in September
DECLARE @FirstOfSeptember DATETIME
DECLARE @FirstMonday DATETIME
SET @FirstOfSeptember ='2009-09-01' ---First of sept 2009
SELECT @FirstMonday = CASE
WHEN DATEPART(WEEKDAY, DATEADD(DAY, 0,@FirstOfSeptember )) = 2 THEN @FirstOfSeptember
WHEN DATEPART(WEEKDAY, DATEADD(DAY, 1,@FirstOfSeptember )) = 2 THEN DATEADD(DAY,1,@FirstOfSeptember
)
WHEN DATEPART(WEEKDAY, DATEADD(DAY, 2,@FirstOfSeptember )) = 2 THEN DATEADD(DAY,2,@FirstOfSeptember
)
WHEN DATEPART(WEEKDAY, DATEADD(DAY, 3,@FirstOfSeptember )) = 2 THEN DATEADD(DAY,3,@FirstOfSeptember
)
WHEN DATEPART(WEEKDAY, DATEADD(DAY, 4,@FirstOfSeptember )) = 2 THEN DATEADD(DAY,4,@FirstOfSeptember
)
WHEN DATEPART(WEEKDAY, DATEADD(DAY, 5,@FirstOfSeptember )) = 2 THEN DATEADD(DAY,5,@FirstOfSeptember
)
WHEN DATEPART(WEEKDAY, DATEADD(DAY, 6,@FirstOfSeptember )) = 2 THEN DATEADD(DAY,6,@FirstOfSeptember
)
END
Clone permissions of another user in SQL server
This script show how copy permissions (or DB roles) from user (@usr1) to another user (@usr2).
/********
******/
DECLARE @usr1 VARCHAR(20)
DECLARE @usr2 VARCHAR(20)
DECLARE @Grp VARCHAR(30)
DECLARE group_cur CURSOR FOR SELECT name FROM sysusers WHERE issqlRole=1
SET @usr1 = 'user-orig'
SET @usr2 = 'user-target'
OPEN group_cur
FETCH NEXT FROM group_cur INTO @Grp
WHILE @@FETCH_STATUS = 0
BEGIN
IF EXISTS(SELECT *
FROM sysmembers AS member INNER JOIN sysusers AS usr ON member.memberuid = usr.uid
INNER JOIN sysusers AS usg ON member.groupuid = usg.Uid
WHERE usr.name = @usr1 AND usg.name= @grp)
EXEC sp_addrolemember @Grp, @usr2
ELSE
EXEC sp_droprolemember @Grp, @usr2
FETCH NEXT FROM group_cur INTO @Grp
END
CLOSE group_cur
DEALLOCATE group_cur
--------
/********
******/
DECLARE @usr1 VARCHAR(20)
DECLARE @usr2 VARCHAR(20)
DECLARE @Grp VARCHAR(30)
DECLARE group_cur CURSOR FOR SELECT name FROM sysusers WHERE issqlRole=1
SET @usr1 = 'user-orig'
SET @usr2 = 'user-target'
OPEN group_cur
FETCH NEXT FROM group_cur INTO @Grp
WHILE @@FETCH_STATUS = 0
BEGIN
IF EXISTS(SELECT *
FROM sysmembers AS member INNER JOIN sysusers AS usr ON member.memberuid = usr.uid
INNER JOIN sysusers AS usg ON member.groupuid = usg.Uid
WHERE usr.name = @usr1 AND usg.name= @grp)
EXEC sp_addrolemember @Grp, @usr2
ELSE
EXEC sp_droprolemember @Grp, @usr2
FETCH NEXT FROM group_cur INTO @Grp
END
CLOSE group_cur
DEALLOCATE group_cur
--------
Subscribe to:
Comments (Atom)