存储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
然后我得到的错误
在指定的上下文非布尔类型,其中一个条件的预期,近“开始”的一种表现。
希望你能理解我的目标并能帮助我。
如果有必要,我需要建立一个第二个存储过程:(一为“<”,一个针对“>”
问候拉尔夫
答
只要改变你的操作数<>
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)
注意:您应该**不要**为存储过程使用'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_'并将其他内容用作前缀 - 或者根本没有前缀! –
哦!我非常感谢你提供这些信息。没有注意到这个信息 – Ralf