logical equal and sql sql-server operators

equal - sql comparison operators



SQL Server*= ¿Operador? (6)

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 ello en MSDN . La consulta ejecuta y devuelve datos. Por lo que nadie sabe, esto ha estado en el sistema desde que usaban SQL Server 2000, pero ahora están ejecutando 2005.

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


Creo que esos son "operadores de unión externa no ANSI". El nivel de compatibilidad de su base de datos debe ser 80 o inferior.


Elimine este código inmediatamente y sustitúyalo por una unión izquierda. ¡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á en desuso para el futuro.

Voy a agregar que al ajustarse a las combinaciones de la izquierda, también debe eliminar todas esas otras combinaciones implícitas. La sintaxis de unión implícita ha sido obsoleta desde 1992, no hay excusa para que aún esté en el código de producción. Y la mezcla de combinaciones implícitas y explícitas puede dar resultados inesperados.


Es una combinación externa izquierda, = * es una combinación externa derecha.

Por ejemplo, los siguientes son iguales;

SELECT * FROM Table1 LEFT OUTER JOIN Table2 ON Table1.ID = Table2.FK_ID SELECT * FROM Table1, Table2 WHERE Table1.ID *= Table2.FK_ID



Esa es la antigua sintaxis ANSI (ANSI-89) del operador de unión externa izquierda. Recomiendo no usarla: la sintaxis ANSI es más detallada y es mucho más legible.


La sintaxis no ANSI para las combinaciones externas ( *= y =* ) se encuentra en la lista oficial de características en desuso que se eliminarán en la próxima versión de SQL .

Las siguientes funciones del Motor de base de datos de SQL Server no serán compatibles en la próxima versión de SQL Server. No use estas características en el nuevo trabajo de desarrollo, y modifique las aplicaciones que actualmente usan estas características tan pronto como sea posible.

La característica de reemplazo es la sintaxis compatible con ANSI de JOIN .