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

时间:2019-05-16 00:03:10

标签: c# sql-server

我正在尝试创建存储过程,但是会发生以下问题:

  

消息2715,第16级,状态3,过程usp_UpatePriv,第1行
  列,参数或变量#1:找不到数据类型tblScreen。参数   或变量“ @screen”的数据类型无效。

     

消息1087,第16级,状态1,过程usp_UpatePriv,第8行
  必须声明表变量“ @screen”。

这是存储过程:

--require

1 个答案:

答案 0 :(得分:5)

您需要声明表值类型,并且应该摆脱游标。 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