【问题标题】:Stored procedure in MS SQL Server 2005MS SQL Server 2005 中的存储过程
【发布时间】:2011-08-11 05:42:39
【问题描述】:

这里有一个场景:当我在客户端应用程序(用 Delphi 开发)中按下一个按钮时,一个存储过程被激活。存储过程首先为一个返回两列BankID和BankCategoryID的select语句声明一个游标。然后我需要将游标内的每一行提取到一条记录中并检查BankCategoryID并根据BankCategoryID返回一个结果集,如:

CASE WHEN fetched_record.BankCategoryID=1  THEN
    SELECT STATEMENT1 WHEN fetched_record.BankCategoryID=2 THEN
    SELECT STATEMENT2 and so on...

然后我将从上述任何情况下检索到的结果集返回给我的客户端应用程序。这可能吗?

【问题讨论】:

    标签: sql-server-2005 stored-procedures database-cursor


    【解决方案1】:

    也许您想使用IF 作为光标内的控制语句?

    WHILE @@FETCH_STATUS = 0
    BEGIN
        IF @BankCategoryID=1  
        BEGIN
           SELECT Baz From Bat;
           DECLARE @Spam bit; 
           SELECT @Spam = 0;
        END
    
        IF @BankCategoryID=2  
        BEGIN
           SELECT Foo FROM Bar;       
        END
      FETCH NEXT FROM MyCursor INTO @BankID, @BankCategory
    END
    

    这是sample TSQL cursor。您会将两列值加载到 2 个变量中:@BankID@BankCategoryID。即FETCH NEXT FROM MyCursor INTO @BankID, @BankCategoryID

    旁白:我想知道这是否可以在没有光标的情况下完成?无论哪种情况,以上内容都应该适用于您在游标的每次迭代中实现更多 TSQL 语句。

    【讨论】:

    • 是“fetched_record”。 MS SQL 的语法是真的吗?它适用于 Oracle,但我不完全了解 MS SQL,所以我就这样写了。
    • @Mik:您是否也需要帮助构建 TSQL 游标?如果您用更大的问题更新您的问题,我敢打赌不需要光标。如果您愿意,请更新您的问题并提供更多详细信息。
    • 那我如何在没有游标的情况下遍历结果集?
    • @mik:遍历数据库服务器上的结果集并不是一个好的解决方案。 SQL 是为数据集而构建的,有时我们程序员会以程序方式处理数据库问题,而基于集合的解决方案在数据库中性能更高且更合适。绝大多数情况下,光标不是必需的,具体取决于您的目标。我们希望利用 SQL 的基于集合的范例,以便在一次调用中快速获取数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    相关资源
    最近更新 更多