
Procedimiento almacenado que compruebe en 2 tablas
Publicado por Mon (4 intervenciones) el 23/03/2022 23:37:58
Buenas noches, mi consulta es relacionada con la creación de un procedimiento almacenado que tiene que comprobar la existencia de un campo en 2 tablas para así poderlo borrar. Tengo las siguientes tablas:
Tabla FormaMat, ,con las columnas: IdFormaMat, Nombre, Descripcion, FechaRegistro
Tabla StockMat, ,con las columnas: IdStockMat, IdFormaMat, ...
Tabla ConsultaMat, ,con las columnas: IdConsMat, IdFormaMat, ....
El procedimiento almacenado tiene que comprobar que no haya ninguna forma de material (FormaMat) en las tablas StockMat y ConsultaMat, para así poderlo borrar de la tabla con el IdFormaMat que se le pasa por una variable (@IdFormaMat)
Esto es lo que tengo escrito:
Haciendo esto me da un error "Se ha especificado una expresión de tipo no booleano en el contexto donde se esperaba una expresión"
Según entiendo yo de esta forma, debe comprobar si sale false las 2 expresiones Select, entonces no existe en ninguna tabla y se puede eliminar, en cualquier otro caso no se puede borrar porque existe en alguna de las 2 tablas.
Tabla FormaMat, ,con las columnas: IdFormaMat, Nombre, Descripcion, FechaRegistro
Tabla StockMat, ,con las columnas: IdStockMat, IdFormaMat, ...
Tabla ConsultaMat, ,con las columnas: IdConsMat, IdFormaMat, ....
El procedimiento almacenado tiene que comprobar que no haya ninguna forma de material (FormaMat) en las tablas StockMat y ConsultaMat, para así poderlo borrar de la tabla con el IdFormaMat que se le pasa por una variable (@IdFormaMat)
Esto es lo que tengo escrito:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
CREATE PROC sp_eliminarformamat(
@IdFormaMat int,
@Resultado bit output,
@Mensaje varchar(500) output
)
AS
BEGIN
SET @Resultado = 1
--SET @Mensaje = ''
-- HAY QUE HACER UNA COMPROBACION CON LAS TABLAS CON LAS QUE ESTÉ RELACIONADA :
-- FormaMat -> StockMaterial y ConsultaMaterial
IF NOT EXISTS (
SELECT * FROM FormaMat f
INNER JOIN StockMaterial s ON s.IdFormaMat = f.IdFormaMat
WHERE f.IdFormaMat = @IdFormaMat)
OR (SELECT * FROM FormaMat f
INNER JOIN ConsultaMaterial c ON c.IdFormaMat = f.IdFormaMat
WHERE f.IdFormaMat = @IdFormaMat
)
BEGIN
DELETE TOP(1) FROM FormaMat WHERE IdFormaMat = @IdFormaMat
END
ELSE
BEGIN
SET @Resultado = 0
SET @Mensaje = 'La forma de material se encuentra relacionada en un stock de material.'
END
END
Haciendo esto me da un error "Se ha especificado una expresión de tipo no booleano en el contexto donde se esperaba una expresión"
Según entiendo yo de esta forma, debe comprobar si sale false las 2 expresiones Select, entonces no existe en ninguna tabla y se puede eliminar, en cualquier otro caso no se puede borrar porque existe en alguna de las 2 tablas.
Valora esta pregunta


0