如何解决sql的“选择案例”与“其他”以及关于“ egin”的说明
IF (Some Condition) --<-- If condition is true control will get inside the
BEGIN -- BEGIN ..END Block and execute the Code inisde
/* Your Code Here*/
END
所有单个IF语句将独立检查条件。
IF (Some Condition) --<-- If condition is true control will get inside the
BEGIN -- BEGIN ..END Block and execute the Code inisde
/* Your Code Here*/ -- IF not true control will jump to Else block
END
ELSE --<-- You dont mention any condition here
BEGIN
/* Your Code Here*/
END
如果IF true,则仅执行一个代码块,然后执行第一个代码块Otherwsie ELSE代码块。
IF (Some Condition) --<--1) If condition is true control will get inside the
BEGIN -- BEGIN ..END Block and execute the Code inisde
/* Your Code Here*/ -- IF not true control will check next ELSE IF Blocl
END
ELSE IF (Some Condition) --<--2) This Condition will be checked
BEGIN
/* Your Code Here*/
END
ELSE IF (Some Condition) --<--3) This Condition will be checked
BEGIN
/* Your Code Here*/
END
ELSE --<-- No condition is given here Executes if non of
BEGIN --the previous IFs were true just like a Default value
/* Your Code Here*/
END
如果条件为真,则仅执行代码的第一块,其余部分将被忽略。
在执行任何IF,ELSE
IF或ELSE之后,如果要执行多个语句,则必须将它们包装在一个BEGIN..END
块中。如果仅执行一条语句,则没有必要,但是始终使用BEGIN
END块是一个好习惯,这样可以更轻松地读取您的代码。
我已经取出ELSE语句来使每个IF语句独立地检查给定条件,现在您已经有了一些有关如何处理IF和ELSE的想法,因此请自己尝试一下,因为我不知道您到底想在此处应用什么逻辑。
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
IF EXISTS (SELECT 1 FROM myTable2 WHERE myPar2 = @myPar2)
BEGIN
INSERT INTO myTable1(myField1, myField2, myField3, myField4)
VALUES(@myPar1, @myPar2, '', 1)
END
IF EXISTS (SELECT 1 FROM myTable3 WHERE myPar2 = @myPar2)
BEGIN
INSERT INTO myTable1(myField1, myField2, myField3, myField4)
VALUES(@myPar1, @myPar2, '', 1)
END
END
解决方法
我对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,myField4)
VALUES
(@myPar1,1)
END
END
这些是我的问题:
1-是否存在宏观误差?
2-有人建议使用“ SELECT CASE”,其他人建议使用“ IF … ELSE”,有什么区别?那我的存储的最佳选择是什么?
3-我不确定使用“ BEGIN … END”语句,特别是结合使用“ IF … ELSE”语句。这是什么意思?是否有必要在“ IF …
ELSE”语句中放入“ BEGIN … END”?还要执行一条指令吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。