Como se puede agregar el valor de una variable al momento de ejecutar una procedimiento almacenado
Publicado por nick (20 intervenciones) el 27/12/2019 07:19:25
Saludos a todos estoy desarrollando un procedimiento almacenado el cual pretende insertar los datos de cabecera bien sea en una tabla de compra o una de pedidos,las cuales tienen casi la misma estructura,pero me surgen 2 inconvenientes y quiero por favor me presten su ayuda(esta largo pero es por las linias de codigo por favor leer)
1 como puedo darle un valor a una variable antes de ejecutar el SP,ya que El Sp solo me pide los valores de la insercion para este caso pero necesito darle un parametro,este es el codigo para ejecutar el parametro:
if tipo=3 then
Cnn.Execute " Exec CabeceraCompras '" & .TextControl & "'," & .IdAsesor & ",'" & .TextId & "'," & _
Replace(.TextFactor, ",", ".") & "," & Replace(.TextMonto, ",", ".") & "," & Replace(Me.TextBFlete, ",", ".") & "," & _
Replace(Me.TextBGrabable, ",", ".") & ", " & Replace(TexDescuento, ",", ".") & ", " & Replace(Me.Textsubtotal, ",", ".") & "," & _
Replace(Me.TextBIva, ",", ".") & "," & Replace(Me.Textotal, ",", ".") & ",'" & Me.TextObservaciones & "'"
end if
en vez de hacer el if desde la aplicacion,las condiciones ya estan en el SP pero como hago para darle el valor al @tipo dese la plicacion,aca muestro el codigo de sql server:
ALTER Procedure [dbo].[CabeceraCompras](
@N_Control varchar(10)
,@Id_Proveedor varchar(20)
,@Factor decimal(12,2),
@BaseMex decimal(12,2),
@Flete decimal(12,2),
@Sub_Total decimal(12,2),
@Descuento decimal(12,2),
@Grabable decimal(12,2),
@Iva decimal(12,2),
@Total decimal(12,2),
@Observaciones varchar(50))
as
Declare @Numero varchar(10),@Tipo int, @Tipo_Reg varchar(20)
Select @Tipo=2 --Como hago para que al momento de ejecutar el SP pueda yo asignar el valor de
---la variable @Tipo
select @Numero=correlativo + 1,@Tipo_Reg=Detalle from
Doc_Correlativo where id=@Tipo
set nocount on
if @Tipo=3
begin
INSERT INTO Header_Compra(
[Numero]
,[N_Control]
,[Tipo]
,[Id_Proveedor]
,[Factor]
,[BaseMex]
,[Flete]
,[Sub_Total]
,[Descuento]
,[Grabable]
,[Iva]
,[Total]
,[Tipo_Reg]
,[Observaciones])
VALUES(
@Numero,
@N_Control,
@Tipo,
@Id_Proveedor,
@Factor,
@BaseMex,
@Flete,
@Sub_Total,
@Descuento,
@Grabable,
@Iva,
@Total,
@Tipo_Reg,
@Observaciones)
end;
if @Tipo=2
begin
declare @Id_Cliente varchar(20),@Id_Vendedor varchar(10)
INSERT INTO Header_Pedidos(
[Numero]
,[Tipo]
,[Id_Cliente]
,Id_Vendedor
,[Factor]
,[BaseMex]
,[Flete]
,[Sub_Total]
,[Descuento]
,[Grabable]
,[Iva]
,[Total]
,[Observaciones])
VALUES(
@Numero,
@Tipo,
@Id_Cliente,
@Id_Vendedor,
@Factor,
@BaseMex,
@Flete,
@Sub_Total,
@Descuento,
@Grabable,
@Iva,
@Total,
@Observaciones)
end;
Lo que no quiero es estar haciendo SP para cada cabecera,si no que en uno solo y dependiendo del tipo me envie la informacion a la tabla correspondiente.
2 por ultimo menciono que haciendo las pruebas desde sql server añadiendo manualmente el valor a @tipo cuando este es 3 me realiza la operacion pero cuando es 2 me salta este error"Mens 547, Nivel 16, Estado 0, Procedimiento CabeceraCompras, Línea 142 Instrucción INSERT en conflicto con la restricción FOREIGN KEY "FK_Header_Compra_Proveedores". El conflicto ha aparecido en la base de datos "BD_DEMAR", tabla "dbo.Proveedores", column 'CodProv'.
Se terminó la instrucción.",y no entiendo por que ya que con el end termino el primer if y no debe haber conflcto con el insert a la tabla pedido que es el tipo 2,ayuda por favor
1 como puedo darle un valor a una variable antes de ejecutar el SP,ya que El Sp solo me pide los valores de la insercion para este caso pero necesito darle un parametro,este es el codigo para ejecutar el parametro:
if tipo=3 then
Cnn.Execute " Exec CabeceraCompras '" & .TextControl & "'," & .IdAsesor & ",'" & .TextId & "'," & _
Replace(.TextFactor, ",", ".") & "," & Replace(.TextMonto, ",", ".") & "," & Replace(Me.TextBFlete, ",", ".") & "," & _
Replace(Me.TextBGrabable, ",", ".") & ", " & Replace(TexDescuento, ",", ".") & ", " & Replace(Me.Textsubtotal, ",", ".") & "," & _
Replace(Me.TextBIva, ",", ".") & "," & Replace(Me.Textotal, ",", ".") & ",'" & Me.TextObservaciones & "'"
end if
en vez de hacer el if desde la aplicacion,las condiciones ya estan en el SP pero como hago para darle el valor al @tipo dese la plicacion,aca muestro el codigo de sql server:
ALTER Procedure [dbo].[CabeceraCompras](
@N_Control varchar(10)
,@Id_Proveedor varchar(20)
,@Factor decimal(12,2),
@BaseMex decimal(12,2),
@Flete decimal(12,2),
@Sub_Total decimal(12,2),
@Descuento decimal(12,2),
@Grabable decimal(12,2),
@Iva decimal(12,2),
@Total decimal(12,2),
@Observaciones varchar(50))
as
Declare @Numero varchar(10),@Tipo int, @Tipo_Reg varchar(20)
Select @Tipo=2 --Como hago para que al momento de ejecutar el SP pueda yo asignar el valor de
---la variable @Tipo
select @Numero=correlativo + 1,@Tipo_Reg=Detalle from
Doc_Correlativo where id=@Tipo
set nocount on
if @Tipo=3
begin
INSERT INTO Header_Compra(
[Numero]
,[N_Control]
,[Tipo]
,[Id_Proveedor]
,[Factor]
,[BaseMex]
,[Flete]
,[Sub_Total]
,[Descuento]
,[Grabable]
,[Iva]
,[Total]
,[Tipo_Reg]
,[Observaciones])
VALUES(
@Numero,
@N_Control,
@Tipo,
@Id_Proveedor,
@Factor,
@BaseMex,
@Flete,
@Sub_Total,
@Descuento,
@Grabable,
@Iva,
@Total,
@Tipo_Reg,
@Observaciones)
end;
if @Tipo=2
begin
declare @Id_Cliente varchar(20),@Id_Vendedor varchar(10)
INSERT INTO Header_Pedidos(
[Numero]
,[Tipo]
,[Id_Cliente]
,Id_Vendedor
,[Factor]
,[BaseMex]
,[Flete]
,[Sub_Total]
,[Descuento]
,[Grabable]
,[Iva]
,[Total]
,[Observaciones])
VALUES(
@Numero,
@Tipo,
@Id_Cliente,
@Id_Vendedor,
@Factor,
@BaseMex,
@Flete,
@Sub_Total,
@Descuento,
@Grabable,
@Iva,
@Total,
@Observaciones)
end;
Lo que no quiero es estar haciendo SP para cada cabecera,si no que en uno solo y dependiendo del tipo me envie la informacion a la tabla correspondiente.
2 por ultimo menciono que haciendo las pruebas desde sql server añadiendo manualmente el valor a @tipo cuando este es 3 me realiza la operacion pero cuando es 2 me salta este error"Mens 547, Nivel 16, Estado 0, Procedimiento CabeceraCompras, Línea 142 Instrucción INSERT en conflicto con la restricción FOREIGN KEY "FK_Header_Compra_Proveedores". El conflicto ha aparecido en la base de datos "BD_DEMAR", tabla "dbo.Proveedores", column 'CodProv'.
Se terminó la instrucción.",y no entiendo por que ya que con el end termino el primer if y no debe haber conflcto con el insert a la tabla pedido que es el tipo 2,ayuda por favor
Valora esta pregunta


0