Sql server 在选择强制转换之前获取@ROWCOUNT值
MSSQL2016 我需要从光标中筛选出那些选择不返回结果的邮件,以便不发送空邮件。由于正在对内部选择结果进行html格式化和强制转换,检查 如果@@ROWCOUNT>0 这永远是真的。说得好一点,总是这样 @@行数=1 无论select实际返回的行是什么 是否可以在强制转换之前获取实际的select行数作为临时参数传递到后续的EXEC sp_send_mail yes/no检查Sql server 在选择强制转换之前获取@ROWCOUNT值,sql-server,tsql,Sql Server,Tsql,MSSQL2016 我需要从光标中筛选出那些选择不返回结果的邮件,以便不发送空邮件。由于正在对内部选择结果进行html格式化和强制转换,检查 如果@@ROWCOUNT>0 这永远是真的。说得好一点,总是这样 @@行数=1 无论select实际返回的行是什么 是否可以在强制转换之前获取实际的select行数作为临时参数传递到后续的EXEC sp_send_mail yes/no检查 OPEN C1; FETCH NEXT FROM C1 INTO @WishListID, @use
OPEN C1;
FETCH NEXT FROM C1 INTO
@WishListID, @userEmail, @category, @range, @geoid, @searchCity, @userName, @GeoLocation
WHILE @@FETCH_STATUS = 0
BEGIN
SET @tableHTML =
N'<H4>Hello ' + @userName + '<H4>Here''s your Daily Digest</H4>' +
N'<table border="0">' +
N'<tr><th>Department</th>' +
N'<th>Name</th><th>Description</th>' +
N'<th>Place</th></tr>' +
CAST ( ( SELECT td = c.Name, '',
td = p.Name, '',
td = p.Description, '',
td = @searchCity
FROM Products as p
JOIN Categories AS c ON p.CategoryID = c.ID
JOIN AspNetUsers AS u ON p.UserID = u.Id
JOIN GeoData_ALL AS g ON u.GeoID = g.ID
WHERE p.IsApproved = 1 AND p.IsDeleted = 0 AND p.DateExpire > convert(date, getdate())
AND (@geoid = 0 or g.GeoLocation.STDistance(@GeoLocation) <= (@range*5000))
AND (@category = 0 or p.CategoryID = @category)
ORDER BY p.ID
FOR XML PATH('tr'), TYPE
) AS NVARCHAR(MAX) ) +
N'</table>' ;
IF @@ROWCOUNT > 0
EXEC sp_send_mail
@from='news@xyz.com',
@to = @userEmail,
@subject = 'Weekly xyz Digest',
@body = @tableHTML,
@bodytype = 'htmlbody',
@output_mesg = @out_mesg output,
@output_desc = @out_desc output ;
FETCH NEXT FROM C1 INTO
@WishListID, @userEmail, @category, @range, @geoid, @searchCity, @userName, @GeoLocation
END
CLOSE C1;
DEALLOCATE C1;
当然这是可能的,在游标循环中执行任何其他操作之前,您只需使用SELECT COUNT*查询即可 但是,也许一种更简洁的方法是检查@tableHTML的值中是否存在@searchCity的值,而不是检查@ROWCOUNT>0 为了回答我想你想问的问题,如果我有一个SET@var='sometext'+selectsomestuff语句,我可以在后面找出SELECT中有多少行吗 答案是否定的。好吧,在没有解析和分析您添加SELECT结果的变量值的情况下是不行的。您始终可以计算填充字符串中的个数。您可以这样做
select 1
要填充@rowcount我会选择并在IF-exist中使用它。我认为一种方法是在table之前检查查询的select部分。htmlit看起来像是在cast中使用IF-EXISTS,但没有解决如何检查sp\u send\u mail是否应该启动,我的第一个想法是将select移到cast之外,并将其指定给要检查的temp变量。在任何情况下,我都不是SQL专家,这就是为什么我要问:你能再详细说明一下吗?不。。。当然,你需要在演员阵容之外。关键是要在构建HTML字符串之前查看select是否返回任何内容。提供的所有参数都可以为null或零值,searchCity也不例外。但这建议我检查一下@tableHTML!=。没有行等于空表html:太简单了。谢谢