ms sql server存储过程中的哪个'select'将返回到c#代码中的数据集?

时间:2013-08-14 07:03:37

标签: sql-server

例如: 这是一个商店程序:

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'是否会返回数据集?

2 个答案:

答案 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上进行了性能测试,我认为大多数结果仍然有效。

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