SQL Server - Como se puede agregar el valor de una variable al momento de ejecutar una procedimiento almacenado

 
Vista:
sin imagen de perfil
Val: 45
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Plutarco Pérez
Val: 122
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Como se puede agregar el valor de una variable al momento de ejecutar una procedimiento almacenado

Publicado por Plutarco Pérez (46 intervenciones) el 31/12/2019 16:28:05
Hola, buenos días

Perdoname, pero no entiendo bien tu problema con @tipo, si no quieres asignarlo dentro del sp porqué no lo pasas como parámetro?

En cuanto a tu error, ya revisaste la definición de tu tabla Header_Pedidos? No se que tenga que ver un proveedor con un pedido

O tu no hiciste las tablas o no supiste para qué son las Foreign keys
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 45
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Como se puede agregar el valor de una variable al momento de ejecutar una procedimiento almacenado

Publicado por nick (20 intervenciones) el 01/01/2020 01:32:13
Saludos gracias por responder,exactamente el procedure es originalmente para compras por eso es que aparece proveedor,pero para no estar haciendo procedure para todo quiero hacer un solo procedure donde pueda hacer una insercion a la tabla de compras si el @tipo es 3,si es 2 el @tipo que la insercion se haga en la tabla pedido,si es 1 que la insercion se haga en la tabla ventas,eso es lo que estoy buscando,entonces como los parametros de insercion son los que voy a mandarle los valores desde mi aplicacion al ejecutar el procedure como le mando el valor al parametro @ tipo para que segun el numero me ejecute el procedure a la tabla que corresponda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Javier
Val: 111
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Como se puede agregar el valor de una variable al momento de ejecutar una procedimiento almacenado

Publicado por Javier (45 intervenciones) el 02/01/2020 22:08:45
Como comentario, muy personal en cuanto a tu codigo e idea creo que estas estableciendo mal todo tu desarrollo, ahora, simplemente pasa como parametro el tipo, asi como pasas el idAsesor o cualquier otra de esas variables, el error que comentas en el punto dos, esto se debe a que estas pasando un id de proveedor que no existe en tu tabla proveedores.

Haz esto en tu sp para que pruebes.

1
2
DECLARE @Tipo INT
SET @Tipo = 2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 45
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Como se puede agregar el valor de una variable al momento de ejecutar una procedimiento almacenado

Publicado por nick (20 intervenciones) el 03/01/2020 06:57:29
Gracias por tu respuesta al principio dedpues de declarar las vsriables declaro los parametros como ves aca @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
Lo que deseo es saber cuando ejecuto el procedure

Exec cabeceras varibles del insert...
Donde va el parametro @tipo en el execute para asignarle un valor gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Javier
Val: 111
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Como se puede agregar el valor de una variable al momento de ejecutar una procedimiento almacenado

Publicado por Javier (45 intervenciones) el 04/01/2020 21:46:49
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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)),
@Tipo int    --Aqui pondrias como parametro la variable
as


y cuando mandes llamar el sp desde tu aplicación agrega la variable tipo a tu instrucción.

1
Cnn.Execute "Todo el rollo que tienes" al final agregas "tipo" como un parámetro mas

y en tu sp modificas

1
2
3
Declare @Numero varchar(10), @Tipo_Reg varchar(20)
 
Select @Tipo=2 --Esto lo eliminas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 45
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Como se puede agregar el valor de una variable al momento de ejecutar una procedimiento almacenado

Publicado por nick (20 intervenciones) el 05/01/2020 05:53:43
Muchas gracias lo voy a probar a ver que tal con mi rollo jaja
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 45
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Como se puede agregar el valor de una variable al momento de ejecutar una procedimiento almacenado

Publicado por nick (20 intervenciones) el 05/01/2020 09:38:07
Gracias por su participacion un saludo cordial
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 45
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Como se puede agregar el valor de una variable al momento de ejecutar una procedimiento almacenado

Publicado por nick (20 intervenciones) el 05/01/2020 09:42:06
Amigo mio muchas gracias funciono a la perfeccion lo que me sugeriste,un saludo cordial y de nuevo gracias por tu colaboracion,tema cerrado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar