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

--------