简体   繁体   English

如何在SQL Server 2012存储过程中声明表变量?

[英]How to declare a table variable in SQL Server 2012 stored procedure?

I'm trying to create a stored procedure but the following problem occurs: 我正在尝试创建存储过程,但是发生以下问题:

Msg 2715, Level 16, State 3, Procedure usp_UpatePriv, Line 1 消息2715,级别16,状态3,过程usp_UpatePriv,第1行
Column, parameter, or variable #1: Cannot find data type tblScreen. 列,参数或变量#1:找不到数据类型tblScreen。 Parameter or variable '@screen' has an invalid data type. 参数或变量“ @screen”的数据类型无效。

Msg 1087, Level 16, State 1, Procedure usp_UpatePriv, Line 8 消息1087,级别16,状态1,过程usp_UpatePriv,第8行
Must declare the table variable "@screen". 必须声明表变量“ @screen”。

This is the stored procedure: 这是存储过程:

create procedure usp_UpatePriv
    @screen tblScreen Readonly
as
    declare @username nvarchar(50)
    declare @prev bit
    declare @idscreen bigint

    declare privlange cursor for
        (select username, idScren, Prev from @screen)

    open privlange

    fetch next from privlange into @username, @idscreen, @prev

    while @@FETCH_STATUS = 0  
    begin
        update tblScreenPriv 
        set Prev = @prev 
        where Username = @username and idScreen = @idscreen

        fetch next from privlange into @username, @idscreen, @prev
    end

    close privlange;  
    deallocate privlange;

You need to declare the Table-Valued Type, and you should get rid of the cursor. 您需要声明表值类型,并且应该摆脱游标。 EG: 例如:

create type tblScreen as table(username nvarchar(50), idScren int, Prev bit)
go

create proc usp_UpatePriv
 @screen  tblScreen Readonly
as
begin
        with q as 
        (
          select o.Prev, n.Prev NewPrev
          tblScreenPriv o
          join @screen n
            on o.UserName = n.UserName
           and o.idScreen = n.idScreen
        )
        --select * from q
        update q set Prev = NewPrev;
end

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何将变量传递给 SQL 服务器存储过程? - How to pass a variable to SQL Server stored procedure? 如何使用SQL 2012创建存储过程? - How to create Stored Procedure using SQL 2012? C#和SQL Server存储过程-必须声明标量变量@SellerLocationID - C# & SQL Server stored procedure - Must Declare The Scalar Variable @SellerLocationID 通过创建datetime将null传递到sql server 2012 datetime的问题? 变量到我的存储过程 - Issue in passing null into sql server 2012 datetime by creating datetime? variable to my stored procedure 如何从SQL Server存储过程中读取数据表 - How to read data table from SQL Server stored procedure 如何在存储过程中读取xml文件并将其插入到SQL Server中的表中 - How to read xml file in stored procedure and insert it in table in sql server SQL Server 2005:如何在存储过程中“访问” XML表参数 - SQL Server 2005 : how to 'access' XML table parameter in stored procedure 如何将可为空的guid声明为带有SQL Server的C#CLR存储过程的可选参数 - How to declare a nullable guid as an optional parameter for a C# CLR stored procedure with SQL Server 如何使用存储过程从 SQL Server 2012 以字符串形式检索 Blob(VarBinary)数据? - How to retrieve Blob (VarBinary) data as string from SQL Server 2012 using a stored procedure? SQL Server:在存储过程中使用表函数 - SQL Server : using table function in stored procedure
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM