[英]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.