Sql Query Puzzling - PullRequest
       22

Sql Query Puzzling

0 голосов
/ 20 февраля 2020

My SQL Ошибки запроса, утверждающие:

Msg 537, Level 16, State 2, Line 1 Invalid length parameter passed to the LEFT or SUBSTRING function.

НИЖЕ - это запрос, который не работает, но как только я заменю «Выбрать» на «Выбрать топ 100» на внутренний запрос (OQry), он работает (это отмечено в комментариях к коду). Ошибка выглядит неуместной. Есть идеи?

1006
Select distinct OQry.Create_tstamp, OQry.LDC_Account_Num, OQry.Territory_code, Replace(LEFT(OQry.Customer_Name,CHARINDEX(' ',OQry.Customer_Name)-1),'-','') as LastName, 
trim(Replace(Right(OQry.Customer_Name, Len(OQry.Customer_Name) - Len(Replace(LEFT(OQry.Customer_Name,CHARINDEX(' ',OQry.Customer_Name)-1),'-','') )),'-','')) as FirstName,
OQry.Commodity,OQry.confirmed_start_date,OQry.confirmed_drop_date,OQry.Market_status_desc,OQry.Reason_code,OQry.Flow_direction_Desc,OQry.AGENT_CODE,Da.AGENT_CODE as [Sub Agent]
from
(
select --This doesn't work but If I replace this with "Select top 100" then it works....  WHAT?!
d.Create_tstamp, d.customer_tkn,
right('00000000'+d.customer_tkn,8) + '-' + right('00'+d.customer_acct_tkn,2) + '-' +  right('0000'+d.account_pkg_tkn,4) as [Account Number], a.AGENT_CODE,
dl.LDC_Account_Num, d.Territory_code, Customer_Name, da.account_pkg_desc as Commodity, da.confirmed_start_date, da.confirmed_drop_date, d.Reason_code, d.Flow_direction_Desc,
d.Market_status_desc
from 
datamart_market_detail d
left outer join datamart_ldc dl on dl.Customer_Tkn = d.Customer_tkn 
and dl.Customer_Acct_Tkn = d.Customer_Acct_Tkn and dl.Account_Pkg_Tkn = d.Account_Pkg_Tkn
left join datamart_accounts da on d.Customer_tkn = da.customer_tkn and d.Customer_Acct_Tkn = da.customer_acct_tkn and d.Account_Pkg_Tkn = da.account_pkg_tkn
left outer join datamart_agent a on a.CUSTOMER_TKN = da.customer_tkn 
where Market_status_desc like '%Drop%'
) OQry
left join
datamart_agent Da
on OQry.customer_tkn = Da.customer_tkn and OQry.[Account Number] = (right('00000000'+da.customer_tkn,8) + '-' + right('00'+da.customer_acct_tkn,2) + '-' +  right('0000'+da.account_pkg_tkn,4))

1 Ответ

0 голосов
/ 20 февраля 2020

У вас проблема с данными, возникшая из Falsehoods Программисты верят в имена .

Где-то в вашем наборе данных есть значение OQry.Customer_Name, которое не структурировано так, как вы ожидаете, чтобы оно стало основой для вызова функции CHARINDEX.

. Внимательно посмотрите на данные в этом столбце.

SELECT 
  *
FROM (...)  AS OQry
WHERE
  CHARINDEX(' ', OQry.Customer_Name) - 1 <= 0
...