|
|
|
Grasshopper
      
Group: General Forum Members
Last Login: Wednesday, December 12, 2012 11:40 AM
Points: 11,
Visits: 132
|
|
Hello All,
I have situation where if user pass the userid then their respective hierarchy display.Here is SP
CREATE PROCEDURE TraverseUsersRecursive @UserId INT AS
/* to change action on each vertex, change these lines */ DECLARE @Name VARCHAR(100) SELECT @Name=(SELECT (FRST_NM + '' + LST_NM) as name FROM sys_usr WHERE usrid=@UserId) PRINT SPACE(@@NESTLEVEL*2)+STR(@UserId)+'|| '+@Name DECLARE submenu CURSOR LOCAL FOR SELECT usrid FROM sys_usr WHERE APROV_ID=@UserId OPEN submenu FETCH NEXT FROM submenu INTO @UserId WHILE @@FETCH_STATUS=0 BEGIN EXEC TraverseUsersRecursive @UserId FETCH NEXT FROM submenu INTO @UserId END CLOSE submenu DEALLOCATE submenu
Result will be(please see the attachment) 800000000|| Dave Smith 810000000|| Michael Chak 811000000|| David Boon 811100000|| Glen Macgrath 811110000|| Alex Boon 811111000|| Jim Foley 811111100|| Sean Rody 811111110|| Lucian 811111111|| Ferrer 821000000|| Stephan 822000000|| Robin 811111110|| Miranda 811111112|| Sohail 823000000|| Imran 824000000|| Amir
Now I have situation where I need to add/delete new user(deletion happen only by Admin),each user can add other users and any dummy user will replace any user. Can any body help me to design SP. Appreciate your help. Thanks in Advance R
|
|
|
|
|
SSC Veteran
      
Group: General Forum Members
Last Login: 2 days ago @ 8:56 AM
Points: 274,
Visits: 787
|
|
|
|
|
|
Ten Centuries
      
Group: General Forum Members
Last Login: Monday, May 20, 2013 12:37 AM
Points: 1,049,
Visits: 1,439
|
|
|
|
|
|
SSC Eights!
      
Group: General Forum Members
Last Login: Yesterday @ 1:30 AM
Points: 803,
Visits: 2,124
|
|
This should do the trick, but with out example data it might be off the mark, luckily I was at a loose end for an hour or to and pus some data together based on the sample.
DECLARE @sys_user TABLE (UserId bigint ,FRST_NM varchar(100) ,LST_NM varchar(100) ,APROV_ID bigint) Insert into @sys_user Select 800000000, 'Dave', 'Smith', NULL UNION Select 810000000, 'Michael', 'Chak',800000000 UNION Select 811000000, 'David', 'Boon',810000000 UNION Select 811100000, 'Glen','Macgrath',811000000 UNION Select 811110000, 'Alex', 'Boon',811100000 UNION Select 811111000, 'Jim', 'Foley',811111000 UNION Select 821000000,'Stephan', '',800000000
DECLARE @UserId BIGINT=800000000
select * from @sys_user
;With submenu (UserId,Name,APROV_ID,lvl) AS ( Select UserId, FRST_NM + ' '+LST_NM as Name,APROV_ID, 0 lvl From @sys_user Where UserId=@UserId Union ALL Select su.UserId ,su.FRST_NM + ' '+su.LST_NM ,su.APROV_ID ,sm.lvl+1 From @sys_user su Join submenu sm ON su.APROV_ID=sm.UserId ) Select SPACE(lvl*2)+STR(UserID) + '|| '+Name,lvl From submenu Order by UserId
PS: I see you're a bit of a cricket fan, hope you're enjoying the T20.
_________________________________________________________________________ SSC Guide to Posting and Best Practices
|
|
|
|
|
Grasshopper
      
Group: General Forum Members
Last Login: Wednesday, December 12, 2012 11:40 AM
Points: 11,
Visits: 132
|
|
Thank you all for response. Now my next question is how to handle new user addition / substitution if any user is on leave. My thought is replace temp user with absent user.for example: if a = 1,b = 2 then using temp variable I have to swap a= 2 ,b = 1.please help me in this.
|
|
|
|
|
SSC Eights!
      
Group: General Forum Members
Last Login: Yesterday @ 1:30 AM
Points: 803,
Visits: 2,124
|
|
I think to help with the substitution we're going to need sample data, and the rules.
I take it sys_user has a column or lookup to another table to show when a person is on holiday and who is covering for them, but without the structures and sample data we will struggle to help any further.
_________________________________________________________________________ SSC Guide to Posting and Best Practices
|
|
|
|
|
SSCommitted
      
Group: General Forum Members
Last Login: Tuesday, January 15, 2013 11:11 AM
Points: 1,945,
Visits: 2,782
|
|
Instead of mimicking pointer chains with cursors, loops and other procedural code (ugh! how non-relational! ), look at the nested sets model. Since you did not bother to post DDL, we cannot correct it.
Books in Celko Series for Morgan-Kaufmann Publishing Analytics and OLAP in SQL Data and Databases: Concepts in Practice Data, Measurements and Standards in SQL SQL for Smarties SQL Programming Style SQL Puzzles and Answers Thinking in Sets Trees and Hierarchies in SQL
|
|
|
|
|
Grasshopper
      
Group: General Forum Members
Last Login: Wednesday, December 12, 2012 11:40 AM
Points: 11,
Visits: 132
|
|
Hello All, I have already provided the Cursor(sort of DDL) which are creating the tree view. Also i tried to provide the tree view result of cursor.Thank you re write in recursive way to handle the tree view.Answer to Jason question, User information is define in single table,which include user name, user id ,approver id ,Role .Rule which I need to define here
1) Super Admin can add any user at any node level.First it will scan whether userid is exist or not then new add new user. 2) In case of absent of user, another user(same level or any different level user) will perform his/her role activity 3) Once user will come back then user will insert in same role 4) Admin can delete any user (in case of user leave the org) and corresponding child node will assign to another user.
These are above rule need to implement.Please help me in this. Thanks Rohit
|
|
|
|
|
SSCrazy Eights
        
Group: General Forum Members
Last Login: Today @ 2:33 PM
Points: 8,620,
Visits: 8,261
|
|
roh_ranjan (9/26/2012) Hello All, I have already provided the Cursor(sort of DDL) which are creating the tree view. Also i tried to provide the tree view result of cursor.Thank you re write in recursive way to handle the tree view.Answer to Jason question, User information is define in single table,which include user name, user id ,approver id ,Role .Rule which I need to define here
1) Super Admin can add any user at any node level.First it will scan whether userid is exist or not then new add new user. 2) In case of absent of user, another user(same level or any different level user) will perform his/her role activity 3) Once user will come back then user will insert in same role 4) Admin can delete any user (in case of user leave the org) and corresponding child node will assign to another user.
These are above rule need to implement.Please help me in this. Thanks Rohit
A cursor is nothing like DDL. A cursor is a poor performing example of DML. DDL is create table statements. The problem is that we can't see from here what you see. We don't know the project and we don't have any tables to run queries against.
If you want some real help with your code please take a look at the first link in my signature about best practices.
_______________________________________________________________
Need help? Help us help you.
Read the article at http://www.sqlservercentral.com/articles/Best+Practices/61537/ for best practices on asking questions.
Need to split a string? Try Jeff Moden's splitter.
Cross Tabs and Pivots, Part 1 – Converting Rows to Columns Cross Tabs and Pivots, Part 2 - Dynamic Cross Tabs
|
|
|
|
|
Grasshopper
      
Group: General Forum Members
Last Login: Wednesday, December 12, 2012 11:40 AM
Points: 11,
Visits: 132
|
|
Hello Sean
Thank you for response.I completely agree what you are saying.If you see the above Jason response where he created temp table and show the hierarchy.In same table I need to perform addition/deletion/substitution of the user.Can you help me in this. Thanks R
|
|
|
|