Как объявить табличную переменную в хранимой процедуре SQL Server 2012? - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь создать хранимую процедуру, но возникает следующая проблема:

Сообщение 2715, Уровень 16, Состояние 3, Процедура usp_UpatePriv, Строка 1
Столбец, параметр или переменная# 1: Не удается найти тип данных tblScreen.Параметр или переменная '@screen' имеет недопустимый тип данных.

Сообщение 1087, Уровень 16, Состояние 1, Процедура usp_UpatePriv, Строка 8
Необходимо объявить табличную переменную "@screen".

Это хранимая процедура:

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;

1 Ответ

5 голосов
/ 16 мая 2019

Вам нужно объявить табличный тип, и вы должны избавиться от курсора. 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...