0

这可能是一个相当新手的问题,但我无法在 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

我有一个我认为可行的解决方案(发布为下面的答案),但我觉得我正在解决我缺乏知识的问题,而不是做最好的模式。

编辑-我删除了我的第一个解决方案,因为它是一个可怕的想法,并且不希望其他人尝试实现它。原来问题实际上是这种情况下的解决方案;谢谢大家。

4

2 回答 2

2

IF语句的语法是

IF Boolean_expression 
     { sql_statement | statement_block } 
[ ELSE 
     { sql_statement | statement_block } ] 

ELSE部分是可选的。

“sql_statement”是任何单个语句。“statement_block”是一组包含在一个BEGINEND

更多详细信息:http: //msdn.microsoft.com/en-us/library/ms182717.aspx

于 2013-04-22T15:29:17.000 回答
2

不必有 else 语句。如果满足 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

帮自己和你的团队一个忙:除非 100% 必要,否则不要使用 goto。通常,结构良好的代码不需要它们。

于 2013-04-22T15:36:39.540 回答