Desventajas de usar Querys Dinamicos

25/04/2008 - 15:21 por Daniel H. Villa | Informe spam
Hola compañeros:

Segun tengo entendido que hay ciertas desventajas para usar dentro de un SP,
querys como esta forma:

SET @CommandString = 'SELECT C.CongressID, C.CongressName, ' +
' dbo.StatusToText(2,C.CongressType) AS CongressType, C.StartDate,
C.EndDate, C.LimitDate, C.InscriptionCost, C.AccomodationsCost,
C.AirticketCost, ' +
' dbo.StatusToText(3,C.Status) AS Status, C.Status AS StatusCode, ' +
' (SELECT COUNT(*) ' +
' FROM Scholarship S ' +
' JOIN AdminUser AU ' +
' ON AU.AdminUserID = S.CreatedBy ' +
@WhereSQString +
' ) AS ScholarshipToAuth ' +
' FROM Congress C ' +
@WhereString

EXECUTE (@CommandString)

RETURN(@@Error)


Me gustaria saber si hay una forma de hacer esto pero sin el manejo de un
query dinamico:

Salu2 Cordiales :-))

(""'·._.·L.I. Daniel Villa·._.·'"")

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
25/04/2008 - 18:01 | Informe spam
Daniel H. Villa,

El problema no es usar queries dinamicos, sino como creas esos queries. Si
te das cuenta, estas concatenando valores entrados por el usuario y esto si
es peligroso.

1 - Tienes que lidear con los apostrofes cuando concatenas valores
caracteres o fechas.

2 - Si no usas parametros, entonces puedes sobrecargar el cache de
procedimientos con multiples copias del mismo query ya que al substituir los
valores directamente en el texto, el optimizador los considera como queries
diferentes.

3 - Ojo, te expones a que se injecte codigo T-SQL, lo cual pone en riesgo tu
instancia. Puedes usar Microsoft Live Search para buscar informacion
respecto a "Injeccion de codigo T-SQL" o en Ingles "SQL Injection".

The Curse and Blessings of Dynamic SQL
http://www.sommarskog.se/dynamic_sql.html

AMB


"Daniel H. Villa" wrote:

Hola compañeros:

Segun tengo entendido que hay ciertas desventajas para usar dentro de un SP,
querys como esta forma:

SET @CommandString = 'SELECT C.CongressID, C.CongressName, ' +
' dbo.StatusToText(2,C.CongressType) AS CongressType, C.StartDate,
C.EndDate, C.LimitDate, C.InscriptionCost, C.AccomodationsCost,
C.AirticketCost, ' +
' dbo.StatusToText(3,C.Status) AS Status, C.Status AS StatusCode, ' +
' (SELECT COUNT(*) ' +
' FROM Scholarship S ' +
' JOIN AdminUser AU ' +
' ON AU.AdminUserID = S.CreatedBy ' +
@WhereSQString +
' ) AS ScholarshipToAuth ' +
' FROM Congress C ' +
@WhereString

EXECUTE (@CommandString)

RETURN(@@Error)


Me gustaria saber si hay una forma de hacer esto pero sin el manejo de un
query dinamico:

Salu2 Cordiales :-))

(""'·._.·L.I. Daniel Villa·._.·'"")



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida