Procedimiento almacenado para INSERT

13/02/2004 - 01:52 por Gregorio López Rojo | Informe spam
Hola a todos. Estoy diseñando un procedimiento almacenado para insertar
valores en una tabla y es el siguiente:

create procedure spInsertToPartes
@NumParte varchar(50) = NULL,
@DescEsp varchar(150) = NULL,
@DescIng varchar(150) = NULL,
@ipGenero int = NULL,
@idParte int OUTPUT
as
insert into partes
(NumParte, DescEsp, DescIng, ipGenero)
values
(@NumParte, @DescEsp, @DescIng, @ipGenero)

select @idParte = SCOPE_IDENTITY()

Hasta aquí todo bien, pero quiero mejorar este procedimiento para que los
campos que no se especifiquen en la ejecución del procedimiento tengan en
lugar de NULL
el DEFAULT para dichos campos, ¿cómo sería esto?

Saludos y gracias anticipadas.

Preguntas similare

Leer las respuestas

#1 Maximiliano Damian Accotto
13/02/2004 - 03:04 | Informe spam
lo que se me ocurre es que uses IF y por cada condicion hagas un insert u
otro, sino deberias ver el uso de SqlDinamico algo asi como:

create table maxi45 (id int identity, pais varchar(50) default('arg'))
Go

declare @pais varchar(50)
declare @string as nvarchar(255)

set @pais = null

set @string = 'insert into maxi45 (pais)' +
+ case when @pais is null then ' values(default)' else 'values (''' +
@pais + ''')' end

EXECUTE sp_executesql @string

select * from maxi45


probalo y me decis si te es util

Salu2 enormes

Maximiliano Damian Accotto

Fundicion San Cayetano S.A.
Gerente de IT
Buenos Aires - Argentina
-
Desarrollador 3 estrellas
http://www.microsoft.com/spanish/ms...efault.asp
-
(maxi_accotto[arroba]speedy.com.ar)
MSN:
"Gregorio López Rojo" escribió en el mensaje
news:
Hola a todos. Estoy diseñando un procedimiento almacenado para insertar
valores en una tabla y es el siguiente:

create procedure spInsertToPartes
@NumParte varchar(50) = NULL,
@DescEsp varchar(150) = NULL,
@DescIng varchar(150) = NULL,
@ipGenero int = NULL,
@idParte int OUTPUT
as
insert into partes
(NumParte, DescEsp, DescIng, ipGenero)
values
(@NumParte, @DescEsp, @DescIng, @ipGenero)

select @idParte = SCOPE_IDENTITY()

Hasta aquí todo bien, pero quiero mejorar este procedimiento para que los
campos que no se especifiquen en la ejecución del procedimiento tengan en
lugar de NULL
el DEFAULT para dichos campos, ¿cómo sería esto?

Saludos y gracias anticipadas.


Respuesta Responder a este mensaje
#2 Gregorio López Rojo
13/02/2004 - 03:17 | Informe spam
Había considerado estas opciones, pero el procedimiento almacenado me
quedaría muy grande para mi gusto, es que realmente son 60 campos en la
tabla.
Creo que mejor recurriré a una consulta dinámica del tipo:
Connection.Execute "INSERT INTO Tabla(Campo1, Campo2, CampoN) VALUES('abc',
'xyz', 123)"

Saludos.

"Maximiliano Damian Accotto" wrote in
message news:
lo que se me ocurre es que uses IF y por cada condicion hagas un insert u
otro, sino deberias ver el uso de SqlDinamico algo asi como:

create table maxi45 (id int identity, pais varchar(50) default('arg'))
Go

declare @pais varchar(50)
declare @string as nvarchar(255)

set @pais = null

set @string = 'insert into maxi45 (pais)' +
+ case when @pais is null then ' values(default)' else 'values (''' +
@pais + ''')' end

EXECUTE sp_executesql @string

select * from maxi45


probalo y me decis si te es util

Salu2 enormes

Maximiliano Damian Accotto

Fundicion San Cayetano S.A.
Gerente de IT
Buenos Aires - Argentina
-
Desarrollador 3 estrellas
http://www.microsoft.com/spanish/ms...efault.asp
-
(maxi_accotto[arroba]speedy.com.ar)
MSN:
"Gregorio López Rojo" escribió en el mensaje
news:
> Hola a todos. Estoy diseñando un procedimiento almacenado para insertar
> valores en una tabla y es el siguiente:
>
> create procedure spInsertToPartes
> @NumParte varchar(50) = NULL,
> @DescEsp varchar(150) = NULL,
> @DescIng varchar(150) = NULL,
> @ipGenero int = NULL,
> @idParte int OUTPUT
> as
> insert into partes
> (NumParte, DescEsp, DescIng, ipGenero)
> values
> (@NumParte, @DescEsp, @DescIng, @ipGenero)
>
> select @idParte = SCOPE_IDENTITY()
>
> Hasta aquí todo bien, pero quiero mejorar este procedimiento para que


los
> campos que no se especifiquen en la ejecución del procedimiento tengan


en
> lugar de NULL
> el DEFAULT para dichos campos, ¿cómo sería esto?
>
> Saludos y gracias anticipadas.
>
>


Respuesta Responder a este mensaje
#3 Maximiliano Damian Accotto
13/02/2004 - 03:23 | Informe spam
si o usa IF y hace diferentes opciones, todo depende de lo que quieras hacer
yo prefiero siempre el Store, porque no solo por velocidad sino por
mantenimiento.
Imaginate que queres cambiar algo, seguro que si lo pusiste en tu aplicacion
debes compilar nuevamente, quizas lo pusiste en la capa correcta y noes
tanto pero de no ser asi es un problema :(


Salu2 enormes

Maximiliano Damian Accotto

Fundicion San Cayetano S.A.
Gerente de IT
Buenos Aires - Argentina
-
Desarrollador 3 estrellas
http://www.microsoft.com/spanish/ms...efault.asp
-
(maxi_accotto[arroba]speedy.com.ar)
MSN:
"Gregorio López Rojo" escribió en el mensaje
news:
Había considerado estas opciones, pero el procedimiento almacenado me
quedaría muy grande para mi gusto, es que realmente son 60 campos en la
tabla.
Creo que mejor recurriré a una consulta dinámica del tipo:
Connection.Execute "INSERT INTO Tabla(Campo1, Campo2, CampoN)


VALUES('abc',
'xyz', 123)"

Saludos.

"Maximiliano Damian Accotto" wrote in
message news:
> lo que se me ocurre es que uses IF y por cada condicion hagas un insert


u
> otro, sino deberias ver el uso de SqlDinamico algo asi como:
>
> create table maxi45 (id int identity, pais varchar(50) default('arg'))
> Go
>
> declare @pais varchar(50)
> declare @string as nvarchar(255)
>
> set @pais = null
>
> set @string = 'insert into maxi45 (pais)' +
> + case when @pais is null then ' values(default)' else 'values (''' +
> @pais + ''')' end
>
> EXECUTE sp_executesql @string
>
> select * from maxi45
>
>
> probalo y me decis si te es util
>
> Salu2 enormes
>
> Maximiliano Damian Accotto
>
> Fundicion San Cayetano S.A.
> Gerente de IT
> Buenos Aires - Argentina
> -
> Desarrollador 3 estrellas
>


http://www.microsoft.com/spanish/ms...efault.asp
> -
> (maxi_accotto[arroba]speedy.com.ar)
> MSN:
> "Gregorio López Rojo" escribió en el mensaje
> news:
> > Hola a todos. Estoy diseñando un procedimiento almacenado para


insertar
> > valores en una tabla y es el siguiente:
> >
> > create procedure spInsertToPartes
> > @NumParte varchar(50) = NULL,
> > @DescEsp varchar(150) = NULL,
> > @DescIng varchar(150) = NULL,
> > @ipGenero int = NULL,
> > @idParte int OUTPUT
> > as
> > insert into partes
> > (NumParte, DescEsp, DescIng, ipGenero)
> > values
> > (@NumParte, @DescEsp, @DescIng, @ipGenero)
> >
> > select @idParte = SCOPE_IDENTITY()
> >
> > Hasta aquí todo bien, pero quiero mejorar este procedimiento para que
los
> > campos que no se especifiquen en la ejecución del procedimiento tengan
en
> > lugar de NULL
> > el DEFAULT para dichos campos, ¿cómo sería esto?
> >
> > Saludos y gracias anticipadas.
> >
> >
>
>


Respuesta Responder a este mensaje
#4 Adrian D. Garcia
13/02/2004 - 09:04 | Informe spam
La forma mas facil de realizar esto es modificar el stored procedure para
que quede asi:

create procedure spInsertToPartes
@NumParte varchar(50) = <valor por default1>,
@DescEsp varchar(150) = <valor por default2>,
@DescIng varchar(150) = <valor por default3>,
@ipGenero int = <valor por default4>,
@idParte int OUTPUT
as



Eso si, tendras que fijarte en la definicion de la tabla cuales son los
valores por default de estos campos y ademas si en el futuro cambiaran estos
valores habria que modificar el stored para reflejar estos cambios.


Saludos
Adrian D. Garcia
MCSD
NDSoft Consultoria y Desarrollo

"Gregorio López Rojo" wrote in message
news:
Hola a todos. Estoy diseñando un procedimiento almacenado para insertar
valores en una tabla y es el siguiente:

create procedure spInsertToPartes
@NumParte varchar(50) = NULL,
@DescEsp varchar(150) = NULL,
@DescIng varchar(150) = NULL,
@ipGenero int = NULL,
@idParte int OUTPUT
as
insert into partes
(NumParte, DescEsp, DescIng, ipGenero)
values
(@NumParte, @DescEsp, @DescIng, @ipGenero)

select @idParte = SCOPE_IDENTITY()

Hasta aquí todo bien, pero quiero mejorar este procedimiento para que los
campos que no se especifiquen en la ejecución del procedimiento tengan en
lugar de NULL
el DEFAULT para dichos campos, ¿cómo sería esto?

Saludos y gracias anticipadas.


Respuesta Responder a este mensaje
#5 ulises
13/02/2004 - 15:25 | Informe spam
El procedimiento puede quedar muy grande pero el
rendimiento va a ser mejor que usando sql dinámico, la
opción de Adrián es valida pero no me gusta el hecho de
tener que actualizar en dos lugares al mismo tiempo, eso a
la larga siempre se olvida y puede traerte problemas. Yo
consideraría el usar los IF dentro del stored procedure,
además de esta manera solo tengo que mirar siempre en el
storeprocedure cuando necesito cambiar algo en la lógica
de inserción.

Saludos,
Ulises

Había considerado estas opciones, pero el procedimiento


almacenado me
quedaría muy grande para mi gusto, es que realmente son


60 campos en la
tabla.
Creo que mejor recurriré a una consulta dinámica del tipo:
Connection.Execute "INSERT INTO Tabla(Campo1, Campo2,


CampoN) VALUES('abc',
'xyz', 123)"

Saludos.

"Maximiliano Damian Accotto"


wrote in
message news:
lo que se me ocurre es que uses IF y por cada condicion




hagas un insert u
otro, sino deberias ver el uso de SqlDinamico algo asi




como:

create table maxi45 (id int identity, pais varchar(50)




default('arg'))
Go

declare @pais varchar(50)
declare @string as nvarchar(255)

set @pais = null

set @string = 'insert into maxi45 (pais)' +
+ case when @pais is null then ' values(default)'




else 'values (''' +
@pais + ''')' end

EXECUTE sp_executesql @string

select * from maxi45


probalo y me decis si te es util

Salu2 enormes




-
Maximiliano Damian Accotto

Fundicion San Cayetano S.A.
Gerente de IT
Buenos Aires - Argentina
Desarrollador 3 estrellas





http://www.microsoft.com/spanish/ms...esarrollad
or/default.asp
(maxi_accotto[arroba]speedy.com.ar)
MSN:
"Gregorio López Rojo" escribió en el




mensaje
news:
> Hola a todos. Estoy diseñando un procedimiento




almacenado para insertar
> valores en una tabla y es el siguiente:
>
> create procedure spInsertToPartes
> @NumParte varchar(50) = NULL,
> @DescEsp varchar(150) = NULL,
> @DescIng varchar(150) = NULL,
> @ipGenero int = NULL,
> @idParte int OUTPUT
> as
> insert into partes
> (NumParte, DescEsp, DescIng, ipGenero)
> values
> (@NumParte, @DescEsp, @DescIng, @ipGenero)
>
> select @idParte = SCOPE_IDENTITY()
>
> Hasta aquí todo bien, pero quiero mejorar este




procedimiento para que
los
> campos que no se especifiquen en la ejecución del




procedimiento tengan
en
> lugar de NULL
> el DEFAULT para dichos campos, ¿cómo sería esto?
>
> Saludos y gracias anticipadas.
>
>






.

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida