t sql "select case" vs "if ... else" y explicación sobre "begin"
Tengo pocas experiencias con t sql y tengo que escribir un archivo almacenado.
Este es mi almacenado:
USE myDatabase
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[myStored]
(
@myPar1 INT,
@myPar2 SMALLDATETIME
)
AS
BEGIN
SET NOCOUNT ON
IF EXISTS (
SELECT
1
FROM
myTable1
WHERE
myPar1 = @myPar1
AND myPar2 = @myPar2
)
BEGIN
DELETE FROM
myTable1
WHERE
myPar1 = @myPar1
AND myPar2 = @myPar2
END
ELSE
IF EXISTS (
SELECT
1
FROM
myTable2
WHERE
myPar2 = @myPar2
)
BEGIN
INSERT INTO
myTable1
(myField1, myField2, myField3, myField4)
VALUES
(@myPar1, @myPar2, '', 1)
END
ELSE
IF EXISTS (
SELECT
1
FROM
myTable3
WHERE
myPar2 = @myPar2
)
BEGIN
INSERT INTO
myTable1
(myField1, myField2, myField3, myField4)
VALUES
(@myPar1, @myPar2, '', 1)
END
END
Y estas son mis preguntas:
1 - ¿Hay errores macroscópicos?
2 - Alguien sugiere usar "SELECCIONAR CASO" a otra persona para usar "SI ... ELSE", ¿cuál es la diferencia? ¿Y cuál es la mejor opción para mi almacenado?
3 - No estoy seguro del uso de la declaración "BEGIN ... END", en particular en combinación con la declaración "IF ... ELSE". Qué significa eso? ¿Es necesario poner "BEGIN ... END" dentro de la declaración "IF ... ELSE"? También para ejecutar una sola instrucción?