【问题标题】:How to achieve code similar to for loop from Oracle in SQL Server?如何在 SQL Server 中从 Oracle 实现类似于 for 循环的代码?
【发布时间】:2020-06-22 14:32:52
【问题描述】:

我有一些来自 Oracle 的代码。我想在 SQL Server 中执行类似的代码。

这是我当前的 Oracle 代码:

CREATE OR REPLACE PROCEDURE 
 NEW(V_IN IN VARCHAR2, 
   V_PATH 
   OUT VARCHAR2)IS
  BEGIN
   FOR ITEM IN(SELECT 
   V.A||'\'||T.B AS 
   V_PATH FROM TABLE1 T 
   INNER JOIN VIEW1 V ON 
   V.ID= T.FID WHERE 
   T.FID='12a')

如何在 SQL Server 中编写与此类似的代码?

【问题讨论】:

  • 此代码甚至无法在 oracle 中运行。在for循环的select查询中,不允许INTO。
  • @Tejash 用“as”代替了 into。它现在正在工作
  • 在 SQL Server 中,没有 FOR LOOP。但是,您使用 WHILE LOOP 模拟 FOR LOOP。

标签: oracle loops for-loop sql-server-2017


【解决方案1】:

您可以使用 WHILE LOOP 模拟 FOR LOOP。这里是一个例子

    DECLARE @cnt INT = 0;

WHILE @cnt < 10
BEGIN
   PRINT 'Inside simulated FOR LOOP';
   SET @cnt = @cnt + 1;
END;

PRINT 'Done simulated FOR LOOP';
GO

【讨论】:

    【解决方案2】:

    你可以使用光标

    IF OBJECT_ID('NEW', 'P') IS NOT NULL
      DROP PROCEDURE NEW;
    GO
    
    CREATE PROCEDURE 
     NEW(@V_IN VARCHAR(4000), 
       @V_PATH 
       VARCHAR(4000) OUT)AS
      BEGIN
      SET NOCOUNT ON;
       DECLARE ITEM CURSOR FOR SELECT 
       ISNULL(V.A, '')+''+ISNULL(T.B, '') AS 
       V_PATH FROM TABLE1 T 
       INNER JOIN VIEW1 V ON 
       V.ID= T.FID WHERE 
       T.FID='12a';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-19
      • 2021-10-28
      • 2014-02-15
      相关资源
      最近更新 更多