transact tipos ejemplos datos bloque sql sql-server tsql

tipos - ¿Debo usar!=O<> para no ser igual en T-SQL?



tipos de datos en sql server (14)

Ambos son aceptados en T-SQL. Sin embargo, parece que usar <> funciona mucho más rápido que != . Acabo de ejecutar una consulta compleja que estaba usando != , Y tardó aproximadamente 16 segundos en ejecutarse. Los cambié a <> y ahora la consulta tarda aproximadamente 4 segundos en ejecutarse. ¡Eso es una gran mejora!

He visto SQL que usa ambos != y <> para no ser igual . ¿Cuál es la sintaxis preferida y por qué?

Me gusta != , Porque <> me recuerda a Visual Basic .



Aunque funcionan de la misma manera != Significa exactamente "no igual a", mientras que <> significa mayor que y menor que el valor almacenado.

Considere >= o <= , y esto tendrá sentido cuando tenga en cuenta sus índices a las consultas ... <> se ejecutará más rápido en algunos casos (con el índice correcto), pero en otros casos (índice libre) solo se ejecutarán lo mismo.

Esto también depende de cómo su sistema de bases de datos lee los valores != Y <> . El proveedor de la base de datos puede simplemente hacer un atajo y hacer que funcionen de la misma manera, por lo que no hay ningún beneficio de ninguna manera. PostgreSQL y SQL Server no atajan esto; Se lee como aparece arriba.



Entiendo que la sintaxis C != está en SQL Server debido a su herencia de Unix (en los días de Sybase SQL Server, antes de Microsoft SQL Server 6.5).


La mayoría de las bases de datos admiten != (Lenguajes de programación populares) y <> (ANSI).

Bases de datos que soportan tanto != <> :

Bases de datos que soportan el operador estándar ANSI, exclusivamente :

  • IBM DB2 UDB 9.5: <>
  • Microsoft Access 2010: <>

Parece que los mismos Microsoft prefieren <> a != Como se evidencia en sus restricciones de tabla. Personalmente prefiero usar != Porque lo leí claramente como "no igual", pero si ingresas [field1 != field2] y lo guardas como un [field1 != field2] , la próxima vez que lo consultes, aparecerá como [field1 <> field2] . Esto me dice que la forma correcta de hacerlo es <> .


Prefiero usar != lugar de <> porque a veces uso la sintaxis <s></s> para escribir comandos SQL. Usar != Es más útil para evitar errores de sintaxis en este caso.


Puedes usar lo que quieras en T-SQL. La documentación dice que ambos funcionan de la misma manera. Prefiero != , Porque dice "no es igual" a mi mente (basada en C / C ++ / C #), pero los gurús de la base de datos parecen preferir <> .


Técnicamente funcionan de la misma manera si estás utilizando SQL Server AKA T-SQL. Si lo está utilizando en procedimientos almacenados, no hay ninguna razón de rendimiento para usar uno sobre el otro. Luego se reduce a las preferencias personales. Prefiero usar <> ya que es compatible con ANSI.

Puede encontrar enlaces a los distintos estándares ANSI en ...

http://en.wikipedia.org/wiki/SQL


Una alternativa sería usar el operador NULLIF que no sea <> o != Que devuelve NULL si los dos argumentos son NULLIF iguales en Microsoft Docs . Así que creo que la cláusula WHERE se puede modificar para <> y != siguiente manera:

NULLIF(arg1, arg2) IS NOT NULL

Como descubrí que, usar <> y != No funciona para la fecha en algunos casos. Por lo tanto, usar la expresión anterior hace lo necesario.


!= , a pesar de no ser ANSI, está más en el verdadero espíritu de SQL como un lenguaje legible. Grita no igual. <> dice que es para mí (menor que, mayor que) lo que es simplemente extraño. Sé que la intención es que sea menor o mayor que, por lo tanto, no es igual, pero esa es una manera realmente complicada de decir algo realmente simple.

Simplemente tuve que tomar algunas consultas SQL largas y colocarlas con amor en un archivo XML por un montón de razones estúpidas en las que no voy a entrar.

Basta con decir que XML no está mal con <> en absoluto y tuve que cambiarlos por != Y comprobarme antes de que me arruinaran.



''<>'' es del estándar SQL-92 y ''!='' es un operador proprietary T-SQL. También está disponible en otras bases de datos, pero como no es estándar, debe tomarlo caso por caso.

En la mayoría de los casos, sabrá a qué base de datos se está conectando, por lo que esto no es realmente un problema. En el peor de los casos, puede que tenga que hacer una búsqueda y reemplazar su SQL.