【发布时间】:2018-07-22 18:03:44
【问题描述】:
如果有 raiseerror 或 throw 下面,SQL Server 是否可以通过某种方式在存储过程中不返回 select 语句?
我有选择语句,如果行数大于某个数字,我会引发错误。在我的应用程序中,我使用 ado.net,因此错误出现在第二个结果中(我必须执行 NextResult(),所以在此之前我必须处理我的第一个结果)。是否有可能知道是否有第二个结果?还是可以不返回 select ?或者我该如何解决这个问题:如果它的行数大于某个特定数字,则不处理选择?
【问题讨论】:
-
select语句没有副作用,所以没有什么可以撤消的。 -
是的,我的意思是不要在 sp 结果中返回那个选择
-
你的意思是如果你有
SELECT 1; SELECT 0/0不返回第一个数据集?就像@GordonLinoff 所说,您不能“撤消”数据集。如果您想在发生错误时丢弃该数据集,请处理应用程序中的错误。 -
否则,我唯一能想到的就是把你所有的数据集放到临时表中,然后在处理完SP中的所有数据集后返回这些数据集。如果您有很多数据集或非常大的数据集,则可能会对性能产生(严重)影响。在应用程序中进行丢弃是这里的“正确”选择(在我看来)。
-
(不要粗鲁,但是)你似乎不太愿意接受这里的建议。如果您无法更改您的应用程序或对象,那么您可以做什么?您似乎想要对 SQL Server 本身进行功能更改,而不是更改您的应用程序以使用 SQL Server 的已知功能。您可能需要考虑扩展您的问题以解释您的实际目标(目前尚不清楚,仅在 cmets 中进行了解释),然后您希望如何实现您的目标和您面临的限制.无法更改您的对象或应用程序是很大的限制。
标签: sql sql-server stored-procedures ado.net raiserror