如何在sql中循环用户定义的数据类型并将参数传递给过程

gzjq41n4  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(291)

假设我有以下用户定义的数据类型:

CREATE Type udt_MyType as Table(
@ID int,
@Name varchar(20),
@Address varchar(100)
)

假设我有如下存储过程:

CREATE PROCEDURE sp_MyProc (
 @ID int,
 @Name varchar(20),
 @Address varchar(100)
)
----Some Execution----

现在我想创建一个新的过程,通过在udt\u mytype上循环(***但不对sp\u myproc做任何更改)来调用sp\u myproc上面的程序,所以我希望如下所示:

CREATE Procedure sp_NewProc(
@udt as udt_MyType READONLY
)
AS
BEGIN
     WHILE LOOP on @udt   ----to get each row
     BEGIN
     exec sp_MyProc @udt.ID,@udt.Name,@udt.Address
     NEXT
     END
END

注意:我没有更改sp\u myproc的权限
是否有可能实现sp\u newproc?我想在udt上循环并将参数传递给过程?

but5z9lq

but5z9lq1#

使用游标而不是while循环。

CREATE Procedure sp_NewProc(
@udt as udt_MyType READONLY
)
AS
BEGIN
    DECLARE @ID int,
    @Name varchar(20),
    @Address varchar(100)

    Declare cursor_A cursor
    For Select * from @udt

    Begin
        OPEN cursor_A

        FETCH NEXT FROM cursor_A INTO @ID, @Name, @Address;
            WHILE @@FETCH_STATUS = 0
            BEGIN
                -- To DO Logic
                exec sp_MyProc @ID,@Name,@Address

                FETCH NEXT FROM cursor_A INTO @ID, @Name, @Address;
            END;

            CLOSE cursor_A;
            DEALLOCATE cursor_A;
    End;
End;

相关问题