Aquí están mis 3 mejores.
Número 1. Error al especificar una lista de campos. (Editar: para evitar confusiones: esta es una regla de código de producción. No se aplica a los scripts de análisis únicos, a menos que yo sea el autor).
SELECT *
Insert Into blah SELECT *
debiera ser
SELECT fieldlist
Insert Into blah (fieldlist) SELECT fieldlist
Número 2. Usando un cursor y un bucle while, cuando lo hará un bucle while con una variable de bucle.
DECLARE @LoopVar int
SET @LoopVar = (SELECT MIN(TheKey) FROM TheTable)
WHILE @LoopVar is not null
BEGIN
-- Do Stuff with current value of @LoopVar
...
--Ok, done, now get the next value
SET @LoopVar = (SELECT MIN(TheKey) FROM TheTable
WHERE @LoopVar < TheKey)
END
Número 3. DateLogic a través de tipos de cadena.
--Trim the time
Convert(Convert(theDate, varchar(10), 121), datetime)
Debiera ser
--Trim the time
DateAdd(dd, DateDiff(dd, 0, theDate), 0)
He visto un pico reciente de "Una consulta es mejor que dos, ¿verdad?"
SELECT *
FROM blah
WHERE (blah.Name = @name OR @name is null)
AND (blah.Purpose = @Purpose OR @Purpose is null)
Esta consulta requiere dos o tres planes de ejecución diferentes según los valores de los parámetros. Solo se genera un plan de ejecución y se atasca en la memoria caché para este texto sql. Ese plan se utilizará independientemente del valor de los parámetros. Esto da como resultado un bajo rendimiento intermitente. Es mucho mejor escribir dos consultas (una consulta por plan de ejecución previsto).