Просмотр вызова из хранимой процедуры - PullRequest
0 голосов
/ 29 апреля 2011

У меня есть пользовательский ПРОСМОТР, назовем его [MIKE].Table, который делает отфильтрованный выбор SELECT * FROM TABLE WHERE TL_FILTERKEY in (1,2,3)

Итак, если Майк подключается к серверу и выполняет

"SELECT * FROM TABLE"

, он будетувидеть только часть данных из таблицы.

Существует также процедура с правами dbo и разрешением для Майка для выполнения как

CREATE PROCEDURE tbSelect
as
SELECT * FROM TABLE

Если Майк выполнит exec tbSelect, он увидит ВСЕ строки из таблицы, но не отфильтрует.

Как написать процедуру, чтобы она выбирала данные из пользовательского представления (отфильтрованные строки)?

Я пытался воссоздать процедуру «С ВЫПОЛНИТЬ КАК« Майк »и« С ВЫПОЛНИТЬ КАК ВЫЗОВ »Однако возвращаются все строки.

1 Ответ

2 голосов
/ 29 апреля 2011

Ваш вопрос немного сбивает с толку, и вы не упоминаете свою версию SQL Server, но я подозреваю, что ваша проблема связана с схемами .Когда вы ссылаетесь на объект без схемы, SQL Server сначала ищет объект в схеме пользователя по умолчанию, а затем в схеме dbo.

Как полное предположение, я думаю, что у вас есть пользователь по имени Майк, схема по умолчанию котороготакже Mike, представление с именем Mike.Table и таблица с именем dbo.Table.Когда Майк выполняет свой запрос, Table разрешается до Mike.Table, но когда db_owner запрашивает Table, он разрешается как dbo.Table.

Чтобы избежать путаницы, вам, вероятно, следует использовать более четкие имена объектовтестирование) и всегда указывают имя объекта s с владельцем:

create table dbo.TestTable (col1 int)
go

insert into dbo.TestTable 
select 1
union all
select 2
union all
select 3
go

-- this will return all rows
select col1 from dbo.TestTable
go

create view dbo.TestView
as
select col1
from dbo.TestTable
where col1 >= 2
go

-- this will return 2 rows
select col1 from dbo.TestView
go

create procedure dbo.TestProc
as
select col1 from dbo.TestView
go

-- this will also return 2 rows
exec dbo.TestProc
go

drop proc dbo.TestProc
go
drop View dbo.TestView
go
drop table dbo.TestTable
go
...