Procedimiento Dinamico

08/12/2006 - 16:53 por Jose Gregorio | Informe spam
Saludos a todos

Quiero crear un procedimiento almacenado
que permita guardar datos en solo dos Parametros.

Por Ejemplo :

exec sp_guardarEmpleado 'cedula,nombre,carnet','0141414,jose,14500'

Y que internamente alga hago como esto(Un supuesto):

INSERT INTO (@VALCAMPOS) VALUES (@VALDATOS)

Le agredeceria Mucho su ayuda.

Preguntas similare

Leer las respuestas

#1 AlejandroMH
08/12/2006 - 18:28 | Informe spam
José puedes hacer uso de EXEC() y de sp_executesql aunque por seguridad no
es recomendable crear queries dinamicos, ya que alguien malintencionado
podria utilizar sql injection para obtener informacion de tu base de datos.

http://www.hayes.ch/sql/sql_dinamico.html

Ejemplo:
declare @values varchar(100)

declare @query varchar(200)

set @values = 'cedula, nombre, carnet'

set @query = 'SELECT ' + @values + ' FROM Tabla'

EXEC(@query)



Saludos,

Alejandro MH





"Jose Gregorio" escribió en el mensaje
news:
Saludos a todos

Quiero crear un procedimiento almacenado
que permita guardar datos en solo dos Parametros.

Por Ejemplo :

exec sp_guardarEmpleado 'cedula,nombre,carnet','0141414,jose,14500'

Y que internamente alga hago como esto(Un supuesto):

INSERT INTO (@VALCAMPOS) VALUES (@VALDATOS)

Le agredeceria Mucho su ayuda.

Respuesta Responder a este mensaje
#2 alrashidmtz
08/12/2006 - 19:15 | Informe spam
Que tal, ojala te ayuden las siguientes sugerencias

Puedes crear tu sp de la siguiente forma

create procedure spGuardarEmpleado(@id int, @cedula nvarchar(30) null,
@nombre nvarchar(1000) = null, @carnet nvarchar(20) = null ... etc.
as


update Empleado
set
nombre= isnull(@nombre,nombre)
cedula= isnull(@cedula,cedula)
carnet= isnull(@carnet,carnet)
.
.
where id = @id

si te fijas solo hace un update al id que pasas, se actualizan todos
los valores por sus mismos valores, a menos que uno o varios no traiga
null, se actualiza al valor que le pasaste, no importa cuantos valores
quieras modficar solo se ejecuta una vez el update

La otra es armar el query en una cadena y ejecutarlo por el método
"exec", ya se lo que estás pensando, pero es diferente al
SP_EXECUTESQL, ya que no es un sp que se encuentra almacenado en
master. Se ejecuta de la siguiente forma.

DECLARE @QUERY_UPDATE VARCHAR(255)

SET @QUERY_UPDATE = "update empleado set nombre isnull(@nombre,nombre)
..." -- resto del query

EXEC (@QUERY_UPDATE)
que es un procedimiento almacenado o una función almacenada

Saludos
Al Rashid Martínez
Respuesta Responder a este mensaje
#3 Gustavo Larriera (MVP)
08/12/2006 - 20:56 | Informe spam
Jose Gregorio wrote:
Saludos a todos

Quiero crear un procedimiento almacenado
que permita guardar datos en solo dos Parametros.

Por Ejemplo :

exec sp_guardarEmpleado 'cedula,nombre,carnet','0141414,jose,14500'

Y que internamente alga hago como esto(Un supuesto):

INSERT INTO (@VALCAMPOS) VALUES (@VALDATOS)

Le agredeceria Mucho su ayuda.






Construye en una variable string la sentencia INSERT concatenando la
variable que tiene los nombres de columnas y la variable que tiene los
valores.

set @sqlInsert = 'INSERT INTO ' + @tabla + ' (' + @columnas + ') VALUES
(' + @valores + '); '

Luego ejecuta dicho string con sp_executesql.

Por supuesto que deberás hacer un control muy fino del contenido de las
2 variables para que no construyas un string INSERT incorrecto.




Gustavo Larriera, MVP
Solid Quality
MVP profile: http://aspnet2.com/mvp.ashx?GustavoLarriera
Blog: http://solidqualitylearning.com/blogs/glarriera/
Este mensaje se proporciona tal como es, sin garantías de ninguna clase
/ This message is provided "AS IS" with no warranties expressed or
implied, and confers no rights.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida