例如: 这是一个商店程序:
IF EXISTS (
SELECT 'x'
FROM billable_acct_payout (NOLOCK)
WHERE i_billable_acct_id = @i_billable_acct_id
)
BEGIN
SELECT 'PayoutInfo' as 'TableName'
,ba.i_billable_acct_id as 'BillableAcctId'
...
如上所述,当我调用此存储过程并接收以c#代码返回的数据时,如下所示:
DataSet ds = new Dataset();
DataAdapter da...
da.Fill(ds);
现在我知道'IF EXISTS'中的第一个'select'将不会返回到我的数据集,但是第二个'select'会返回到我的数据集。
问题是,如何知道商店流程中的'select'是否会返回数据集?
答案 0 :(得分:0)
最简单的方法是在Management Studio中执行存储过程并查看返回的内容。
根据经验,以下(可能不完整)选择列表不会向C#返回任何内容:
IF EXISTS (SELECT ...)
SELECT TOP 1 @variable = Field FROM ...
SET @variable = (SELECT TOP 1 Field FROM ...)
INSERT INTO ... SELECT ...
... WHERE Field IN (SELECT ...)
... WHERE Field = (SELECT TOP 1 ...)
DECLARE ... CURSOR FOR SELECT ...
可以说每个SELECT
,其结果不会被周围语句消耗,或者存储过程本身会返回给调用者。
答案 1 :(得分:0)
如果您获得了数据,那么存储过程会将数据返回到您的数据集。
但总的来说,你应该考虑改变那种存储过程。我刚刚在mssql 2000上进行了性能测试,我认为大多数结果仍然有效。
例如,让存储过程将其结果写入表并查询这些结果表会更快。这将是我的建议,更改存储过程,添加唯一键作为参数,并使用这些参数在结果表中查找结果。