SQL Query多个if else条件块

Kra*_*ngh -1 t-sql database sql-server

我创建了sql proc来从数据库中选择记录它成功执行但没有返回任何内容

任何人都可以告诉我在哪里做错了吗?

CREATE PROC [dbo].[bb_EmailSentStatus] 
 @type varchar
AS 
 SET NOCOUNT ON 
 SET XACT_ABORT ON  

 BEGIN TRAN


 IF (@type='pending')
 BEGIN
  SELECT [Mail_Track_Id], [FromName],[FromEmail],[ToName],[ToEmail],[ReplyTo],
         [Subject],[CreatedDate],[ModifiedDate],[Server_Msg],[FromSource] 
  FROM [dbo].[Mail_Track] 
  WHERE Active_Status=1 AND Sent_Status IS NULL
 END
 ELSE IF(@type='failed')
 BEGIN
  SELECT [Mail_Track_Id], [FromName],[FromEmail],[ToName],[ToEmail],[ReplyTo],
         [Subject],[CreatedDate],[ModifiedDate],[Server_Msg],[FromSource] 
  FROM [dbo].[Mail_Track] 
  WHERE Active_Status=1 AND Sent_Status = 0
 END
 ELSE IF(@type='success')
 BEGIN
  SELECT [Mail_Track_Id], [FromName],[FromEmail],[ToName],[ToEmail],[ReplyTo],
         [Subject],[CreatedDate],[ModifiedDate],[Server_Msg],[FromSource] 
  FROM [dbo].[Mail_Track] 
  WHERE Active_Status=1 AND Sent_Status = 1
 END
COMMIT
Run Code Online (Sandbox Code Playgroud)

Kaf*_*Kaf 8

您尚未声明varchar参数的长度.将其更改为:

@type varchar(50) 
Run Code Online (Sandbox Code Playgroud)

如果未指定长度,varchar则仅通过defalt获取1个字符.作为一个好习惯总是记得明确定义变量类型的长度,如varchar,nvarchar等.

如果您使用convert function将值转换为varchar,nvarchar字段,则通过defult需要30个字符,但即使这样,作为一个好习惯,您应该始终声明特定长度.