这可能是一个相当新的问题,但我无法在MSDN中找到如何在Transact-SQL中结束IF / ELSE块的示例。例如,我想创建一个执行此操作的SP:
USE [MyDb];
GO
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
CREATE PROCEDURE [dbo].[usp_MyStoredProc]
@param1 DATE, @param2 INT, @param3 BIT, @param4 [dbo].[CustomDataType] READONLY
WITH EXEC AS CALLER
AS
-- Only run this part if @param3 == true
IF (@param3 = 1)
BEGIN
--do stuff...
END
-- I don't really need an else here, as I'm simply doing an
-- extra step at the beginning if my param tells me to
-- I always want this next part to run...
-- do more stuff...
GO
我有一个我认为有效的解决方案(在下面发布的答案),但我觉得我正在解决我缺乏知识而不是做最好的模式。
编辑 - 我删除了我的第一个解决方案,因为这是一个可怕的想法,并且不希望其他人尝试实现它。原来问题实际上是这种情况下的解决方案;感谢所有人。
答案 0 :(得分:2)
IF
语句的语法是
IF Boolean_expression
{ sql_statement | statement_block }
[ ELSE
{ sql_statement | statement_block } ]
ELSE
部分是可选的。
“sql_statement”是任何单个语句。 “statement_block”是包含在BEGIN
和END
答案 1 :(得分:2)
没有其他声明。如果满足IF条件,那么BEGIN / END之间的任何内容都将运行,之后SQL将正常进行。它与以下内容相同:
If (x == 1) {
// condition met, do stuff
}
// do more stuff
你真的很亲密。只是需要一些调整。
IF (@param3 = 1)
BEGIN
-- do stuff if a param tells me to (has to be done before main block of code is ran below)
END
-- do stuff that should always be ran.
GO
让自己和你的团队受宠:永远不要使用goto,除非它是100%必要的。通常,对于结构良好的代码,它们不是必需的。