Hoy mientras estaba dentro del sistema de producción de un cliente, encontré una consulta de SQL Server que contenía una sintaxis desconocida. En el siguiente ejemplo, ¿qué hace el operador *=
? No pude encontrar ninguna mención de él on MSDN. La consulta ejecuta y devuelve datos. En lo que se sabe, esto ha estado en el sistema, ya que estaban utilizando SQL Server 2000, pero ahora están funcionando 2005.SQL Server * = ¿Operador?
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
'Este código no siempre se interpreta correctamente (a veces SQL Server decide que es una combinación cruzada) incluso en SQL Server 2000 y por lo tanto puede dar resultados incorrectos. También está obsoleto para el futuro. Sé que esto es muy antiguo, pero me preguntaba si tenía documentación que respalda esta afirmación. ¡Gracias! – swasheck
* Se recomienda la sintaxis de SQL-92 porque no está sujeta a la ambigüedad que a veces resulta de las uniones externas de Transact-SQL heredadas. * De [SQL 2000 BOL: Uso de combinaciones externas] (http://msdn.microsoft.com /en-us/library/aa213228(v=sql.80).aspx). Las versiones más nuevas de ese tema ni siquiera mencionan uniones '* =' y '= *'. –
También (gracias @MikaelEriksson): * Se desaconseja usar esta sintaxis para las combinaciones externas debido a la posibilidad de interpretación ambigua y porque no es estándar. En su lugar, especifique combinaciones en la cláusula FROM. * De [SQL 2000 BOL: SELECT] (http://msdn.microsoft.com/en-us/library/aa259187 (v = sql.80) .aspx). –