यहां विभिन्न स्थानों पर इसे कैसे करना है, इसके टुकड़े हैं, लेकिन पूरी तरह से नहीं। ऐसा करने का तरीका यह है:
-
प्रत्येक स्कीमा के लिए एक अद्वितीय लॉगिन और उपयोगकर्ता बनाएं
-
इन उपयोगकर्ताओं को प्रत्येक भिन्न स्कीमा का स्वामी बनाएं।
-
ऐसे प्रत्येक उपयोगकर्ता के डिफ़ॉल्ट स्कीमा को उस स्कीमा के रूप में सेट करें जिसका वह स्वामी है।
-
सिंटैक्स का उपयोग करें
EXECUTE ('sql commands') AS USER = 'schema-owner'
अपने SQL कमांड को उस डिफ़ॉल्ट स्कीमा के संदर्भ में निष्पादित करने के लिए।
निम्न स्क्रिप्ट इसे प्रदर्शित करती है:
--====== Create the Login for the User:
CREATE LOGIN [UserTest1] WITH PASSWORD='whatever', DEFAULT_DATABASE=[TestUsers], DEFAULT_LANGUAGE=[us_english]
GO
--====== Make a User for the Login:
CREATE USER [UserTest1] FOR LOGIN [UserTest1]
GO
--====== Make a Schema owned by the User and default to it:
-- (I assume that you already have the schemas)
CREATE SCHEMA [UserTest1] AUTHORIZATION [UserTest1]
GO
ALTER USER [UserTest1] WITH DEFAULT_SCHEMA=[UserTest1]
GO
--====== Make a sProc in dbo
CREATE PROCEDURE [dbo].[TestSchema_Exec] AS
SELECT 'executing in schema [dbo]'
GO
--====== Make a similar sProc in New Schema
CREATE PROCEDURE [UserTest1].[TestSchema_Exec] AS
SELECT 'executing in schema [UserTest1]'
GO
--========= Demonstrate that we can switch Default Schemas:
EXEC('TestSchema_Exec')
EXEC('TestSchema_Exec') AS USER = 'UserTest1'