Помогите решить проблему.
Есть схема MySchema, есть пользователь MyUser, для которого MySchema - схема по умолчанию, и есть таблица dbo.MyTable.
Еще есть такая процедура, которая запускается под пользователем dbo:
CREATE PROCEDURE dbo.MyProcedure
AS
BEGIN
EXECUTE AS USER = 'MyUser'
CREATE TABLE MyTable (MyField int)
SELECT * FROM MyTable
REVERT
END
GO
Когда выполняется эта процедура, в схеме MySchema создается таблица MySchema.MyTable (как и должно быть), но SELECT делается из таблицы dbo.MyTable.
Что сделать, чтобы SELECT выполнялся из таблицы MySchema.MyTable?. И как это ни странно, но если скрипт из процедуры выполнять не в процедуре, а отдельно, то все работает как надо - создается таблица и из нее же делается SELECT.
Ниче не понимаю???
Вот весь скрипт для проверки:
-- setup
--
CREATE SCHEMA MySchema
GO
CREATE USER MyUser
WITHOUT LOGIN
WITH DEFAULT_SCHEMA = MySchema
GO
CREATE TABLE dbo.MyTable (DboField int)
GO
GRANT CONTROL TO MyUser
go
CREATE PROCEDURE dbo.MyProcedure
AS
BEGIN
EXECUTE AS USER = 'MyUser'
CREATE TABLE MyTable (MyField int)
SELECT * FROM MyTable
REVERT
END
GO
--
-- test
--
-- работает правильно
EXECUTE AS USER = 'MyUser'
CREATE TABLE MyTable (MyField int)
SELECT * FROM MyTable
REVERT
DROP TABLE MySchema.MyTable
GO
-- работает неправильно
EXEC MyProcedure
DROP TABLE MySchema.MyTable
GO
--
-- clean
DROP PROCEDURE MyProcedure
DROP TABLE MyTable
DROP USER MyUser
DROP SCHEMA MySchema