Сегодня, находясь внутри производственной системы клиента, я нашел запрос SQL Server, который содержал незнакомый синтаксис. В приведенном ниже примере, что делает оператор *=
? Я не мог найти упоминания об этом on MSDN. Запрос выполняет и возвращает данные. Насколько кто знает, это было в системе, так как они использовали SQL Server 2000, но они в настоящее время работает 2005SQL Server * = Оператор?
declare @nProduct int
declare @iPricingType int
declare @nMCC int
set @nProduct = 4
set @iPricingType = 2
set @nMCC = 230
--Build SQL for factor matrix
Select distinct
base.uiBase_Price_ID,
base.nNoteRate,
base.sDeliveryOpt,
IsNull(base.nPrice,0) as nPrice,
IsNull(base.nPrice,0) + Isnull(fact.nFactor,0) as nAdjPrice,
base.iProduct_ID,
fact.iPosition as fiPosition,
base.iPosition,
CONVERT(varchar(20), base.dtDate_Updated, 101) + ' ' + CONVERT(varchar(20), base.dtDate_Updated, 108) as 'dtDate_Updated',
fact.nFactor,
fact.nTreasFactor,
product.sProduct_txt ,
pfi.sPFI_Name,
mccprod.nServicing_Fee,
fact.nNoteRate as fNoteRate,
mcc.nLRA_Charge as nLRA
From
tbl_Base_Prices base, tbl_Factors fact, tbl_Product product, tbl_PFI pfi, tbl_MCC mcc, tbl_MCC_Product mccprod
Where
base.iProduct_ID = @nProduct
And base.iProduct_ID *= fact.iProduct_ID
And base.iPosition *= fact.iPosition
And base.nNoteRate *= fact.nNoteRate
And base.iPricing_Type = @iPricingType
And fact.iMCC_ID = @nMCC
And fact.iProduct_ID = @nProduct
And mcc.iMCC_ID = @nMCC
And mcc.iPFI_ID = pfi.iPFI_ID
And mccprod.iMCC_ID = @nMCC
And mccprod.iProduct_ID = @nProduct
And base.iProduct_ID = product.iProduct_ID
and fact.iPricing_Type= @iPricingType
Order By
base.nNoteRate, base.iPosition
'Этот код не всегда правильно интерпретируется (иногда SQL Server решает, что это перекрестное соединение) даже в SQL Server 2000 и, следовательно, может дать неверные результаты! Также он устарел для будущего. «Я знаю, что это очень старый, но мне было интересно, есть ли у вас документация, поддерживающая это утверждение? Благодаря! – swasheck
* Синтаксис SQL-92 рекомендуется, потому что он не подлежит двусмысленности, которая иногда возникает из внешних соединений Transact-SQL. * Из [SQL 2000 BOL: Использование внешних соединений] (http://msdn.microsoft.com /en-us/library/aa213228(v=sql.80).aspx). Более новые версии этой темы даже не упоминают объединения '* =' и '= *'. –
Также (спасибо @MikaelEriksson): * Использование этого синтаксиса для внешних объединений обескураживается из-за возможности неоднозначной интерпретации и потому, что это нестандартно. Вместо этого укажите соединения в предложении FROM. * Из [SQL 2000 BOL: SELECT] (http://msdn.microsoft.com/en-us/library/aa259187 (v = sql.80) .aspx). –