【发布时间】:2013-12-18 21:51:30
【问题描述】:
我对t sql的经验很少,我必须写一个存储。
这是我存储的:
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
这些是我的问题:
1 - 是否存在宏观误差?
2 - 有人建议使用“SELECT CASE”别人使用“IF ... ELSE”,有什么区别?什么是我存储的最佳选择?
3 - 我不确定“BEGIN ... END”语句的使用,尤其是与“IF ... ELSE”语句的结合。这是什么意思?是否有必要将“BEGIN ... END”放在“IF ... ELSE”语句中?也用于执行单条指令?
【问题讨论】:
标签: sql sql-server tsql stored-procedures switch-statement