存储procedere:灵活的参数有关运营商对“IF @recordCount <= @Menge”

问题描述:

我希望有人能我再帮忙,关于我的solved stored procedure problem存储procedere:灵活的参数有关运营商对“IF @recordCount <= @Menge”

是否有任何机会,以使运营商“>”灵活?

现在我的存储过程工作得很好,当记录数大于参数Menge时,我将收到一个电子邮件。

的代码是这样的:

@Menge as int = 0, 
@recordCount as int = 0, 

set @MySQL = 'select @recordCount=count(2) from ' + @MyTable + ' where ' + @MyWhere 
exec sp_execute @MySQL, N'@recordCount int OUTPUT', @[email protected] OUTPUT 

IF @recordCount > @Menge  
begin 
    ... 
    EXEC msdb.dbo.sp_send_dbmail 

现在我要让>灵活地得到一个电子邮件时记录计数小于menge

我想声明帕拉姆,但我不“知道如何将它插入if @recordcount > @Menge线:(

@OpInd as char(1) = null 

我会调用存储过程与

exec sp_eMail_Test3 
     @Menge = 0, 
     @eMail_TO = '[email protected]' , 
     @eMail_Subject = 'test3 ', 
     @eMail_Body = 'Hallo, das ist ein Test', 
     @MyTable ='test' , 
     @MyWhere = 'not [sys_completed] is null' 
     @OpInd = '<' 

如果我尝试IF @recordCount + @OpInd + @Menge然后我得到的错误

在指定的上下文非布尔类型,其中一个条件的预期,近“开始”的一种表现。

希望你能理解我的目标并能帮助我。

如果有必要,我需要建立一个第二个存储过程:(一为“<”,一个针对“>”

问候拉尔夫

+2

注意:您应该**不要**为存储过程使用'sp_'前缀。微软已经保留了这个前缀以供自己使用(参见*命名存储过程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你将来有可能冒着名字冲突的风险。 [这对你的存储过程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是简单地避免使用'sp_'并将其他内容用作前缀 - 或者根本没有前缀! –

+1

哦!我非常感谢你提供这些信息。没有注意到这个信息 – Ralf

只要改变你的操作数<>

IF @recordCount <> @Menge  
begin 
    ... 
    EXEC msdb.dbo.sp_send_dbmail 

只有3个可能的操作数需要处理>,<=因为如果它是>或者它是<然后只是发送电子邮件时,它不是=

另一种方法是重复你的代码。

IF (@recordCount > @Menge or @recordCount < @Menge)  
begin 
    ... 
    EXEC msdb.dbo.sp_send_dbmail 

如果你要把它要么><那么你可以使用DynamicSQL。类似...

declare @sql varchar(max) 
set @sql = 
'IF ' + cast(@recordCount as varchar(16)) + ' ' + @OpInd + ' ' + cast(@Menge as varchar(16)) + '  
begin 
    ... 
    EXEC msdb.dbo.sp_send_dbmail' 

EXEC(@sql) 
+0

谢谢西蒙 – Ralf

+0

没问题@Ralf – scsimon