Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Puis-je définir un schéma par défaut pour une procédure stockée ?

Il y a des façons de faire cela à divers endroits ici, mais pas tout à fait. Pour ce faire, procédez comme suit :

  1. Créez un identifiant et un utilisateur uniques pour chaque schéma

  2. Faites de ces utilisateurs les propriétaires de chaque schéma différent.

  3. Définissez le schéma par défaut de chaque utilisateur comme étant le schéma qu'il possède.

  4. Utilisez la syntaxe EXECUTE ('sql commands') AS USER = 'schema-owner' pour exécuter vos commandes SQL dans le contexte de ce schéma par défaut.

Le script suivant le démontre :

--====== 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'