【问题标题】:SQL Server SP optimal way to get multiple cursors with related dataSQL Server SP 获取具有相关数据的多个游标的最佳方法
【发布时间】:2009-09-03 22:47:36
【问题描述】:

SP 使用一个数据库往返获取相关记录的最佳技术是什么。我需要在 C# 中创建应用级别的 Master.List 结构。

我有主从表: 1. 我需要在明细表中搜索行。 2.我需要在主表中找到对应的行。 3. 我需要返回两个游标: A:主表中的所有相应行。 B:对于主表中的每一行,其从明细表中的所有记录。

我可以通过使用内存表来做到这一点(不是太多的记录),可以吗?

DECLARE @MasterIds TABLE (Id uniqueidentifier)

INSERT INTO @MasterIds (Id)
  SELECT DISTINCT [MasterId]
    FROM [Details]
    WHERE [ColumnA] = 'Α'

SELECT *
  FROM [Master]
  WHERE [Id] IN (SELECT * FROM @MasterIds)

SELECT *
  FROM [Detail] D
  JOIN @MasterIds M
  ON D.Id = M.Id

【问题讨论】:

  • 您真的是指“光标”吗?您发布的代码不使用游标。
  • 对不起,我不正确。我的意思是两个“结果集”。

标签: sql sql-server


【解决方案1】:

我经常在一个存储过程调用中返回多个记录集

在您的情况下,您可以这样做。表变量很有用,但不能很好地扩展。

SELECT * FROM [Master] M WHERE EXISTS (
        SELECT * FROM [Details] D WHERE D.[ColumnA] = 'Α' AND D.MasterId = m.iD)

SELECT * FROM [Detail] D WHERE D.[ColumnA] = 'Α'

【讨论】:

    【解决方案2】:

    假设您有 SQL2000 或更高版本,我会使用 XML 来执行此操作:

    SELECT *
    FROM [Master]
    LEFT OUTER JOIN [Detail]
    ON [Detail].Id = [Master].Id
    WHERE [Master].[Id] IN (SELECT [MasterId] FROM [Details] WHERE [ColumnA] = 'Α')
    FOR XML AUTO
    

    【讨论】:

      猜你喜欢
      • 2010-09-07
      • 2011-06-25
      • 1970-01-01
      • 2013-05-01
      • 1970-01-01
      • 2014-10-19
      • 2010-11-19
      • 2010-09-06
      相关资源
      最近更新 更多