0

例如:这是一个存储过程:

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”中的第一个“选择”不会返回我的数据集,但第二个“选择”会返回。

问题是,如何知道存储过程中的“选择”是否会返回数据集?

4

2 回答 2

0

如果您有数据,则存储过程会将数据返回到您的数据集。

但总的来说你应该考虑改变那种存储过程。我刚刚在一个mssql 2000上做了性能测试,我觉得大部分结果还是有效的。

例如,让存储过程将其结果写入表并查询这些结果表会更快。这将是我对您的建议,更改您的存储过程,添加一个唯一键作为参数并使用这些参数在结果表中查找您的结果。

于 2013-08-14T07:43:32.523 回答
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 ...

可以说 every SELECT,其结果未被周围语句或存储过程本身消耗的结果返回给调用者。

于 2013-08-14T07:06:15.263 回答