|
NguyenL71
Posting Yak Master
228 Posts |
Posted - 2011-01-28 : 13:52:38
|
| [code]Given the tables below, i need to create a function which pass in LoginId and return all the loans base upon the roletype. Please see the business rules below. SQL2008Any suggestions or have better way to do these would greatly appreciate. I have several search SP need to incorporate this new function intoThank you in advance.Joe Celko - Don't need your suggestions or recommendations in case you look into this thread.-------------------------------------------------------------------------------------------------DROP TABLE SecurityRole;goCREATE TABLE dbo.SecurityRole( [RoleCode] [varchar](10) NOT NULL, [RoleTitle] [varchar](30) NULL)GOINSERT INTO [dbo].[SecurityRole]([RoleCode], RoleTitle)SELECT N'CM', N'Collateral Manager' UNION ALLSELECT N'CS', N'Collateral Specialist' UNION ALLSELECT N'IT', N'IT Role'go SELECT * FROM SecurityRole; GODROP TABLE SecurityUserRole;goCREATE TABLE [dbo].[SecurityUserRole]( [UserRoleId] [int] IDENTITY(1,1) NOT NULL, [LoginId] [varchar](20) NOT NULL, [RoleCode] [varchar](10) NULL)GOALTER TABLE SecurityUserRoleADD CONSTRAINT XPKSecurityUserRole PRIMARY KEY (LoginId, UserRoleId)goINSERT INTO [dbo].[SecurityUserRole]([LoginId], [RoleCode])SELECT N'Jdoe', N'IT' UNION ALLSELECT N'SLisa', N'CS' UNION ALLSELECT N'TestUser1', N'CS' UNION ALLSELECT N'Lnguyen', N'CM'go SELECT * FROM SecurityUserRole; GO /* UserRoleId LoginId RoleCode----------- -------------------- ----------1 Jdoe IT4 Lnguyen CM2 SLisa CS3 TestUser1 CS*/DROP TABLE [dbo].[OL]GOCREATE TABLE [dbo].[OL]( [SpecialistId] [varchar](15) NULL, [LoanNum] [varchar](10) NOT NULL)GOINSERT INTO [dbo].[OL]([SpecialistId], [LoanNum])SELECT N'Jdoe', N'10000' UNION ALLSELECT N'LNguyen', N'10001' UNION ALLSELECT N'SLisa', N'10002' UNION ALLSELECT N'TestUser1', N'10003' UNION ALLSELECT N'TestUser1', N'10004' UNION ALLSELECT N'TestUser1', N'10005' UNION ALLSELECT N'SLisa', N'10006' UNION ALLSELECT N'SLisa', N'10007' UNION ALLSELECT N'Jdoe', N'10008' UNION ALLSELECT N'Lnguyen', N'10009'go SELECT * FROM OL; GO /* SpecialistId LoanNum--------------- ----------Jdoe 10000LNguyen 10001SLisa 10002TestUser1 10003TestUser1 10004TestUser1 10005SLisa 10006SLisa 10007Jdoe 10008Lnguyen 10009*/-- Business rules: If the LoginId is in the CM or IT role than he/she can see all the Loans 2. If the LoginId is in the CS (Collaterial Specialist) than he can ONLY see his Loans.-- I need to create a function to accept LoginId and return all his/her loans base up on Security Role.-- Testing...DECLARE @IsFilter BIT = 0DECLARE @LoginId VARCHAR(50) = 'LNguyen' --'Cruz' SELECT @IsFilter = 1 FROM SecurityUserRoles WHERE RoleCode IN ('CM'. 'IT') AND LoginId = @LoginIdSELECT @IsFilter --INSERT @tblLoans (loannum) SELECT SpecialistId,LoanNum FROM OrderLoans WHERE (SpecialistId = @LoginId) OR ( @IsFilter = 1 )go---------------------------------------------------------------------------------Function.CREATE FUNCTION [dbo].[Testfn_tblUserLoans]( @LoginId varchar(50))RETURNS @Loans TABLE (loannum varchar(10) PRIMARY KEY NOT NULL)ASBEGINDECLARE @IsFilter BIT = 0 SELECT @IsFilter = 1 FROM SecurityUserRoles WHERE RoleCode IN ('CM', 'IT') AND LoginId = @LoginId INSERT @tblLoans (loannum) SELECT LoanNum FROM OL WHERE ( (SpecialistId = @LoginId) OR ( @IsFilter = 1 ) ) RETURNENDgo------------------------------------------------------------------------------------------------ Need to incorporate the newly create function into the sp below.ALTER PROCedure [dbo].[spLoanQ_LoanList]( @PoolNum VARCHAR(6) = NULL, @CustomerCode CHAR(3) = NULL, @OrderId INT = NULL, @LoginID VARCHAR(50), @userName VARCHAR(255) = '')AS/*************************************************************************************************** Modifications:** ----------------------------------** Date: Author: Reasons:** ------------+-----------------------------------------------------------------------***************************************************************************************************/SET nocount ONSET TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDDECLARE @IsFilter BIT = 0 SELECT @IsFilter = 1 FROM SecurityUserRoles WHERE (RoleCode IN ('IT', 'CM') ) AND (LoginId = @LoginId) IF @PoolNum = '' SET @PoolNum = NULL IF @CustomerCode = '' SET @CustomerCode = NULL SELECT p.CustomerCode, p.PoolNum, o.OrderId, l.SellerLoanId, luas.[Description] AS 'Status', luas.ActionRequired, l.LoanNum, l.BorrowerLastName, l.BorrowerFirstName, l.PropertyAddress, l.PropertyCity, l.PropertyCounty, l.PropertyState, l.PropertyZipCode, ol.SpecialistId, lo.UserName as 'SpecialistName' FROM Pools AS p JOIN Orders AS o ON p.PoolNum = o.PoolNum JOIN OrderLoans AS ol ON ol.OrderId = o.OrderId JOIN Loans AS l ON l.LoanNum = ol.LoanNum JOIN LUActionStatus AS luas ON luas.ActionStatusCode = ol.ActionStatusCode JOIN Logins lo on ol.SpecialistId = lo.LoginID WHERE ( ol.CurrentOrder = 1 AND ( o.PoolNum = @PoolNum OR @PoolNum IS NULL) AND ( p.CustomerCode = @CustomerCode OR @CustomerCode IS NULL) AND ( ol.OrderId = @OrderId OR @OrderId IS NULL) ) AND ( (ol.SpecialistId = @LoginId) OR ( @IsFilter = 1 ) ); GO[/code] |
|