-1
CREATE Procedure SearchData (@Lastname Varchar(250), @Firstname Varchar(25), @City varchar(50),
@Address1 varchar(40),
@HullID varchar(50),
@State varchar(50),
@Status varchar(15),
@Accountpk varchar(40),
@Agentpk varchar(1000),
@Issuecopk varchar(40),
@Productpk varchar(40), @UserType varchar(15), @UserID varchar(30)) As Begin Set NOCOUNT ON
Declare @Selectionquery As Varchar(8000)
Declare @USAquery As Varchar(4000)
Declare @NonUSAquery As Varchar(4000)
DECLARE @As_User_PK Varchar(50)
DECLARE @TopRows Varchar(50)
DECLARE @NONUSQueryColumns Varchar(1000)
DECLARE @USQueryColumns Varchar(1000)
DECLARE @QueryColumnsTemp Varchar(1000)
DECLARE @errordesc varchar(max)
set @Selectionquery = ''
set @USAquery = ''
set @NonUSAquery = ''
Set @NONUSQueryColumns = ''
Set @USQueryColumns = ''
Set @QueryColumnsTemp = ''
Select @TopRows = Parameter_NUMBER_1
from cl_parameters
where cl_parameter_code='CLIENTSEARCH'
select @As_User_PK = AS_User_PK
from as_users
where AS_User_ID = @UserID
Set @USQueryColumns = '
SELECT PM.POLICY_NO,
PM.POLICY_STATUS_CODE,
--MODIFIED BY SARATH FOR COMPATABILITY MODE ON JAN 15 2014
--ltrim(rtrim(ltrim(rtrim(isnull(CL.first_name,'+''''+' '+''''+') + '+''''+' '+''''+'+ isnull(CL.middle_name,'+''''+''+''''+'))) + '+''''+' '+''''+ '+ CL.last_org_name)) as last_org_name ,
Replace(ltrim(rtrim(ltrim(rtrim(isnull(CL.first_name,'+''''+' '+''''+') + '+''''+' '+''''+'+ isnull(CL.middle_name,'+''''+''+''''+'))) + '+''''+' '+''''+ '+ CL.last_org_name)), ''&'', ''-'') as LASTORGNAME ,
Replace(CL.FULL_LEGAL_NAME, ''&'', ''-'') as FULL_LEGAL_NAME,
CA.ADDRESS_LINE1,
CA.TOWN_CITY + '+''''+' '+''''+' + ISNULL(CLSTATE.STATE_NAME,CA.STATE_CODE),
CONVERT(VARCHAR(20), TERM.Term_Start_Date,101)+ '+''''+' - '+''''+' +CONVERT(VARCHAR(20),TERM.Term_End_Date,101),
Replace(CLAGENT.LAST_ORG_NAME, ''&'', ''-'') as LAST_ORG_NAME,
(Select SCREEN_NAME from CL_CLIENT where CL_CLIENT_PK=PM.ISSUECO_CLIENT_FK),
PRODUCT.Screen_Name,
PM.PO_POLICY_MASTER_PK'
Set @USAquery = '
FROM dbo.PO_POLICY_MASTER PM
INNER JOIN CL_CLIENT CL
ON PM.OWNER_CLIENT_FK = CL.CL_CLIENT_PK'
Set @NONUSQueryColumns = '
SELECT PM.POLICY_NO,
PM.POLICY_STATUS_CODE,
--MODIFIED BY SARATH FOR COMPATABILITY MODE ON JAN 15 2014
--ltrim(rtrim(ltrim(rtrim(isnull(CL.first_name,'+''''+' '+''''+') + '+''''+' '+''''+'+ isnull(CL.middle_name,'+''''+''+''''+'))) + '+''''+' '+''''+ '+ CL.last_org_name)) as last_org_name ,
Replace(ltrim(rtrim(ltrim(rtrim(isnull(CL.first_name,'+''''+' '+''''+') + '+''''+' '+''''+'+ isnull(CL.middle_name,'+''''+''+''''+'))) + '+''''+' '+''''+ '+ CL.last_org_name)), ''&'', ''-'') as LASTORGNAME ,
Replace(CL.FULL_LEGAL_NAME, ''&'', ''-'') as FULL_LEGAL_NAME,
CA.ADDRESS_LINE1,
CA.TOWN_CITY + '+''''+' '+''''+' + ISNULL(CA.STATE_CODE,'+''''+''+''''+'),
CONVERT(VARCHAR(20), TERM.Term_Start_Date,101)+ '+''''+' - '+''''+' +CONVERT(VARCHAR(20),TERM.Term_End_Date,101),
Replace(CLAGENT.LAST_ORG_NAME, ''&'', ''-'') as LAST_ORG_NAME,
(Select SCREEN_NAME from CL_CLIENT where CL_CLIENT_PK=PM.ISSUECO_CLIENT_FK),
PRODUCT.Screen_Name,
PM.PO_POLICY_MASTER_PK'
Set @NonUSAquery = '
FROM dbo.PO_POLICY_MASTER PM
INNER JOIN CL_CLIENT CL
ON PM.OWNER_CLIENT_FK = CL.CL_CLIENT_PK'
IF ISNULL(@Lastname,'') <> ''
BEGIN
SET @USAquery = @USAquery + ' INNER JOIN CL_Client_Name ON CL.CL_CLIENT_PK = CL_CLIENT_NAME.CL_CLIENT_FK'
SET @USAquery = @USAquery + ' AND UPPER(CL_CLIENT_NAME.LAST_ORG_NAME_UCASE) LIKE UPPER('
SET @USAquery = @USAquery + ''''+ @Lastname + '%'+ ''''+')'
SET @NonUSAquery = @NonUSAquery + ' INNER JOIN CL_Client_Name ON CL.CL_CLIENT_PK = CL_CLIENT_NAME.CL_CLIENT_FK'
SET @NonUSAquery = @NonUSAquery + ' AND UPPER(CL_CLIENT_NAME.LAST_ORG_NAME_UCASE) LIKE UPPER('
SET @NonUSAquery = @NonUSAquery + ''''+ @Lastname + '%'+ ''''+')'
END
IF ISNULL(@Firstname,'') <> ''
BEGIN
IF ISNULL(@Lastname,'') = ''
BEGIN
SET @USAquery = @USAquery + ' INNER JOIN CL_Client_Name ON CL.CL_CLIENT_PK = CL_CLIENT_NAME.CL_CLIENT_FK '
SET @USAquery = @USAquery + ' AND UPPER(CL_CLIENT_NAME.FIRST_NAME_UCASE) LIKE UPPER('
SET @USAquery = @USAquery + ''''+ @Firstname + '%'+ ''''+')'
SET @NonUSAquery = @NonUSAquery + ' INNER JOIN CL_Client_Name ON CL.CL_CLIENT_PK = CL_CLIENT_NAME.CL_CLIENT_FK '
SET @NonUSAquery = @NonUSAquery + ' AND UPPER(CL_CLIENT_NAME.FIRST_NAME_UCASE) LIKE UPPER('
SET @NonUSAquery = @NonUSAquery + ''''+ @Firstname + '%'+ ''''+')'
END
ELSE
BEGIN
SET @USAquery = @USAquery + ' AND UPPER(CL_CLIENT_NAME.FIRST_NAME_UCASE) LIKE UPPER('
SET @USAquery = @USAquery + ''''+ @Firstname + '%'+ ''''+')'
SET @NonUSAquery = @NonUSAquery + ' AND UPPER(CL_CLIENT_NAME.FIRST_NAME_UCASE) LIKE UPPER('
SET @NonUSAquery = @NonUSAquery + ''''+ @Firstname + '%'+ ''''+')'
END
END
/* Commented by JB to address the issue that the default adress is billing address hence the policy is not getting diaplayed
SET @USAquery = @USAquery + ' INNER JOIN CL_ADDRESS CA ON CL.CL_CLIENT_PK = CA.CL_CLIENT_FK and CA.Address_Type_Code = ''MAILING'' AND ISNULL(IS_USA,'+''''+'N'+''''+') = '+''''+'Y'+''''+'' */
SET @USAquery = @USAquery + ' INNER JOIN CL_ADDRESS CA ON CL.CL_CLIENT_PK = CA.CL_CLIENT_FK AND ISNULL(IS_USA,'+''''+'N'+''''+') = '+''''+'Y'+''''+''
SET @USAquery = @USAquery + ' INNER JOIN CL_Role_Client crc ON cl.CL_Client_PK = crc.Role_Client_FK AND crc.Source_FK = pm.PO_Policy_Master_PK AND crc.Role_Type_Code = ''POLICY'' AND crc.Role_Address_FK = ca.CL_Address_PK '
/* Commented by JB to address the issue that the default adress is billing address hence the policy is not getting diaplayed
SET @NonUSAquery = @NonUSAquery + ' INNER JOIN CL_ADDRESS CA ON CL.CL_CLIENT_PK = CA.CL_CLIENT_FK and CA.Address_Type_Code = ''MAILING'' AND ISNULL(IS_USA,'+''''+'N'+''''+') = '+''''+'N'+''''+'' */ SET @NonUSAquery = @NonUSAquery + ' INNER JOIN CL_ADDRESS CA ON CL.CL_CLIENT_PK = CA.CL_CLIENT_FK AND ISNULL(IS_USA,'+''''+'N'+''''+') = '+''''+'N'+''''+''
SET @NonUSAquery = @NonUSAquery + ' INNER JOIN CL_Role_Client crc ON cl.CL_Client_PK = crc.Role_Client_FK AND crc.Source_FK = pm.PO_Policy_Master_PK AND crc.Role_Type_Code = ''POLICY'' AND crc.Role_Address_FK = ca.CL_Address_PK '
IF ISNULL(@City,'') <> ''
BEGIN
SET @USAquery = @USAquery + ' AND UPPER(CA.TOWN_CITY) LIKE UPPER('
SET @USAquery = @USAquery + ''''+ @City + '%'+ ''''+')'
SET @NonUSAquery = @NonUSAquery + ' AND UPPER(CA.TOWN_CITY) LIKE UPPER('
SET @NonUSAquery = @NonUSAquery + ''''+ @City + '%'+ ''''+')'
END
SET @USAquery = @USAquery + ' INNER JOIN PO_RISK_MASTER RISK ON RISK.PO_POLICY_MASTER_FK = PM.PO_POLICY_MASTER_PK'
SET @NonUSAquery = @NonUSAquery + ' INNER JOIN PO_RISK_MASTER RISK ON RISK.PO_POLICY_MASTER_FK = PM.PO_POLICY_MASTER_PK'
IF ISNULL(@Address1,'') <> ''
BEGIN
SET @USAquery = @USAquery + ' AND UPPER(CA.ADDRESS_LINE1) LIKE UPPER('
SET @USAquery = @USAquery + ''''+ '%' + @Address1 + '%'+ ''''+')'
SET @NonUSAquery = @NonUSAquery + ' AND UPPER(CA.ADDRESS_LINE1) LIKE UPPER('
SET @NonUSAquery = @NonUSAquery + ''''+ '%' + @Address1 + '%'+ ''''+')'
END
IF ISNULL(@HullID,'') <> ''
BEGIN
SET @USAquery = @USAquery + ' AND UPPER(RISK.RISK_EXTERNAL_ID) LIKE UPPER('
SET @USAquery = @USAquery + ''''+ '%' + @HullID + '%'+ ''''+')'
SET @NonUSAquery = @NonUSAquery + ' AND UPPER(RISK.RISK_EXTERNAL_ID) LIKE UPPER('
SET @NonUSAquery = @NonUSAquery + ''''+ '%' + @HullID + '%'+ ''''+')'
END
SET @USAquery = @USAquery + ' INNER JOIN CL_COUNTRY_STATE CLSTATE ON CA.Country_Code = CLSTATE.CL_Country_Code AND CLSTATE.STATE_CODE = CA.STATE_CODE'
IF ISNULL(@State,'') <> ''
BEGIN
SET @USAquery = @USAquery + ' AND UPPER(CLSTATE.STATE_NAME) LIKE UPPER('
SET @USAquery = @USAquery + ''''+ @State + '%'+ ''''+')'
SET @NonUSAquery = @NonUSAquery + ' AND UPPER(CA.STATE_CODE) LIKE UPPER('
SET @NonUSAquery = @NonUSAquery + ''''+ @State + '%'+ ''''+')'
END
SET @USAquery = @USAquery + '
INNER JOIN PO_TERM_MASTER TERM
ON TERM.PO_POLICY_MASTER_FK = PM.PO_POLICY_MASTER_PK
AND TERM.PO_TERM_MASTER_PK = (SELECT max(po_term_master_pk)
FROM PO_TERM_MASTER
WHERE PO_TERM_MASTER.PO_POLICY_MASTER_FK = PM.po_policy_master_PK)
LEFT OUTER JOIN PA_ACCOUNT_MASTER ACCT
ON ACCT.pa_account_master_pk = PM.PO_AGENT_ACCOUNT_FK
LEFT OUTER JOIN CL_CLIENT CLAGENT
ON CLAGENT.cl_client_pk = ACCT.owner_client_fk
INNER JOIN PR_PRODUCT PRODUCT
ON PRODUCT.PR_PRODUCT_PK = PM.PR_PRODUCT_FK
WHERE 1=1 and PRODUCT.PR_Product_Code <> ''BBRENTAL'' '
SET @NonUSAquery = @NonUSAquery + '
INNER JOIN PO_TERM_MASTER TERM
ON TERM.PO_POLICY_MASTER_FK = PM.PO_POLICY_MASTER_PK
AND TERM.PO_TERM_MASTER_PK = (SELECT max(po_term_master_pk)
FROM PO_TERM_MASTER
WHERE PO_TERM_MASTER.PO_POLICY_MASTER_FK = PM.po_policy_master_PK)
LEFT OUTER JOIN PA_ACCOUNT_MASTER ACCT
ON ACCT.pa_account_master_pk = PM.PO_AGENT_ACCOUNT_FK
LEFT OUTER JOIN CL_CLIENT CLAGENT
ON CLAGENT.cl_client_pk = ACCT.owner_client_fk
INNER JOIN PR_PRODUCT PRODUCT
ON PRODUCT.PR_PRODUCT_PK = PM.PR_PRODUCT_FK
WHERE 1=1 and PRODUCT.PR_Product_Code <> ''BBRENTAL'' '
IF ISNULL(@Status,'') <> ''
BEGIN
IF ISNULL(@Status,'') <> 'ALL'
BEGIN
IF ISNULL(@Status,'') = 'Quote'
BEGIN
SET @USAquery = @USAquery +
' AND exists(
select 0
from dbo.po_transaction pot
where pot.po_policy_master_fk = pm.po_policy_master_pk
and pot.pr_tran_type_code = ''NEWBUSINESS''
and pot.transaction_cycle_code not in (''BOUND'',''VOIDED'',''ISSUED'',''BINDEREXPIRED''))'
SET @NonUSAquery = @NonUSAquery +
' AND exists(
select 0
from dbo.po_transaction pot
where pot.po_policy_master_fk = pm.po_policy_master_pk
and pot.pr_tran_type_code = ''NEWBUSINESS''
and pot.transaction_cycle_code not in (''BOUND'',''VOIDED'',''ISSUED'',''BINDEREXPIRED''))'
END
ELSE IF ISNULL(@Status,'') = 'Bound'
BEGIN
SET @USAquery = @USAquery +
' AND exists(
select 0
from dbo.po_transaction pot
where pot.po_policy_master_fk = pm.po_policy_master_pk
and pot.pr_tran_type_code = ''NEWBUSINESS''
and pot.transaction_cycle_code in (''BOUND'',''BINDEREXPIRED''))'
SET @NonUSAquery = @NonUSAquery +
' AND exists(
select 0
from dbo.po_transaction pot
where pot.po_policy_master_fk = pm.po_policy_master_pk
and pot.pr_tran_type_code = ''NEWBUSINESS''
and pot.transaction_cycle_code in (''BOUND'',''BINDEREXPIRED''))'
END
ELSE
BEGIN
SET @USAquery = @USAquery + ' AND PM.policy_status_code='
SET @USAquery = @USAquery + ''''+ @Status + ''''+''
SET @NonUSAquery = @NonUSAquery + ' AND PM.policy_status_code='
SET @NonUSAquery = @NonUSAquery + ''''+ @Status + ''''+''
END
END
END
IF ISNULL(@Accountpk,'') <> ''
BEGIN
IF ISNULL(@Accountpk,'') <> 'ALL'
BEGIN
SET @USAquery = @USAquery + ' AND PM.Po_Agent_Account_Fk in ('
SET @USAquery = @USAquery + ''''+ @Agentpk + ''''+')'
SET @NonUSAquery = @NonUSAquery + ' AND PM.Po_Agent_Account_Fk in ('
SET @NonUSAquery = @NonUSAquery + ''''+ @Agentpk + ''''+')'
END
END
IF ISNULL(@Issuecopk,'') <> ''
BEGIN
IF ISNULL(@Issuecopk,'') <> 'ALL'
BEGIN
SET @USAquery = @USAquery + ' AND PM.ISSUECO_CLIENT_FK='
SET @USAquery = @USAquery + ''''+ @Issuecopk + ''''+''
SET @NonUSAquery = @NonUSAquery + ' AND PM.ISSUECO_CLIENT_FK='
SET @NonUSAquery = @NonUSAquery + ''''+ @Issuecopk + ''''+''
END
END
IF ISNULL(@Productpk,'') <> ''
BEGIN
IF ISNULL(@Productpk,'') <> 'ALL'
BEGIN
SET @USAquery = @USAquery + ' AND PM.pr_product_fk='
SET @USAquery = @USAquery + ''''+ @Productpk + ''''+''
SET @NonUSAquery = @NonUSAquery + ' AND PM.pr_product_fk='
SET @NonUSAquery = @NonUSAquery + ''''+ @Productpk + ''''+''
END
END
IF ISNULL(@UserType,'') = 'AGENT'
BEGIN
SET @USAquery = @USAquery + '
AND PM.PO_AGENT_ACCOUNT_FK IN(SELECT PA_ACCOUNT_MASTER_PK FROM PA_ACCOUNT_MASTER
WHERE OWNER_CLIENT_FK IN (SELECT AGENT_CLIENT_FK FROM AS_USER_AGENT
WHERE AS_USER_FK = '+''''+convert(varchar,@As_User_PK) + ''''+''+ '))'
SET @NonUSAquery = @NonUSAquery + '
AND PM.PO_AGENT_ACCOUNT_FK IN(SELECT PA_ACCOUNT_MASTER_PK FROM PA_ACCOUNT_MASTER
WHERE OWNER_CLIENT_FK IN (SELECT AGENT_CLIENT_FK FROM AS_USER_AGENT
WHERE AS_USER_FK = '+''''+convert(varchar,@As_User_PK) + ''''+''+ '))'
END
-- Create table #tblcount (Nofofrows numeric(18,0))
-- SET @Selectionquery = 'Insert into #tblcount select count(PM.PO_POLICY_MASTER_PK) ' + @USAquery + ' UNION ALL ' + 'select count(PM.PO_POLICY_MASTER_PK) ' + @NonUSAquery
-- Exec(@Selectionquery) -- Set @errordesc = ''
-- select @errordesc = Error_Description from screen_error_message where Error_No=5339
-- If (select sum(Nofofrows) from #tblcount) > @TopRows -- Begin -- --Set @Selectionquery = 'Select ''NOTE'', '''', ''Too Many Rows Returned'', '''', '''', '''', '''', '''', '''', ''0''' -- Set @Selectionquery = 'Select ''NOTE'', ''>' + convert(varchar(3), @TopRows) + ' rows'', ''' + @errordesc +''', '''', '''', '''', '''', '''', '''', ''0''' -- Exec(@Selectionquery) -- End -- else -- Begin
Create table #tblpolicydata (
POLICY_NO varchar(25),
POLICY_STATUS_CODE varchar(25),
LAST_ORG_NAME varchar(250),
FULL_LEGAL_NAME varchar(250),
ADDRESS_LINE1 varchar(250),
TOWN_CITY varchar(250),
TERM_DATES varchar(25),
AGENTLAST_ORG_NAME varchar(250),
ISSUECO varchar(250),
PRODUCT varchar(50),
PO_POLICY_MASTER_PK numeric(18,0))
--MODIFIED BY SARATH FOR COMPATABILITY MODE ON JAN 15 2014
/* SET @Selectionquery = 'Insert into #tblpolicydata ' + @USQueryColumns + ' ' + @USAquery +
' UNION ALL ' + @NONUSQueryColumns + ' ' + @NonUSAquery + ' ORDER BY CL.LAST_ORG_NAME' */ SET @Selectionquery = 'Insert into #tblpolicydata ' + @USQueryColumns + ' ' + @USAquery +
' UNION ALL ' + @NONUSQueryColumns + ' ' + @NonUSAquery + ''
Exec(@Selectionquery)
update #tblpolicydata
Set POLICY_STATUS_CODE = (Select pot.transaction_cycle_code
From dbo.po_transaction pot
where pot.po_policy_master_fk = #tblpolicydata.PO_POLICY_MASTER_PK
and pot.pr_tran_type_code = 'NEWBUSINESS')
where POLICY_STATUS_CODE = 'Prospect'
Select POLICY_NO,
upper(POLICY_STATUS_CODE) POLICY_STATUS_CODE,
LAST_ORG_NAME,
FULL_LEGAL_NAME,
ADDRESS_LINE1,
TOWN_CITY,
TERM_DATES,
AGENTLAST_ORG_NAME,
ISSUECO,
PRODUCT,
PO_POLICY_MASTER_PK
From #tblpolicydata
GROUP BY POLICY_NO,
upper(POLICY_STATUS_CODE),
LAST_ORG_NAME,
FULL_LEGAL_NAME,
ADDRESS_LINE1,
TOWN_CITY,
TERM_DATES,
AGENTLAST_ORG_NAME,
ISSUECO,
PRODUCT,
PO_POLICY_MASTER_PK
order by POLICY_NO
Drop table #tblpolicydata
-- End -- Drop table #tblcount --Exec INSCS_ClientSearch '','','','','','','India','','','','','','' Set NOCOUNT OFF End
它執行更多時間。如何減少時間?如何使用sql server減少存儲過程的時間?
看看執行計劃,看看它在做,而不是僅僅在這裏張貼SQL大規模量,並希望別人會爲你 – dbajtr
@CSK打破'存儲Procedure'到語句中的小塊並運行使用「實際執行計劃」查詢。嘗試在最常用的列上添加適當的「索引」,並檢查是否有任何正在發生的「表掃描」。 – Joby
這裏需要執行更多的時間,我想減少執行時間。請 – CSK