sql >> Database >  >> RDS >> Sqlserver

Kan ik een standaardschema instellen voor binnen een opgeslagen procedure?

Er zijn hier op verschillende plaatsen stukjes hoe je dit kunt doen, maar niet helemaal. De manier om dit te doen is:

  1. Maak een unieke login &gebruiker voor elk schema

  2. Maak van deze gebruikers de eigenaren van elk verschillend schema.

  3. Stel het standaardschema van elke dergelijke gebruiker in als het schema dat hij bezit.

  4. Gebruik de syntaxis EXECUTE ('sql commands') AS USER = 'schema-owner' om uw SQL-opdrachten uit te voeren in de context van dat standaardschema.

Het volgende script laat dit zien:

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


  1. Hoe de LISTAGG-functie van Oracle te gebruiken met een uniek filter?

  2. Waarom retourneert password_verify false?

  3. Hoe kan ik kolommen in MySQL vertragen?

  4. Aan de slag met het afstemmen van prestaties in Azure SQL Database