sql >> Database teknologi >  >> RDS >> Sqlserver

Kan jeg indstille et standardskema for inden for en lagret procedure?

Der er stykker af, hvordan man gør dette forskellige steder her, men ikke helt. Måden at gøre dette på er:

  1. Lav et unikt login og bruger for hvert skema

  2. Gør disse brugere til ejere af hvert enkelt skema.

  3. Indstil hver sådan brugers standardskema til at være det skema, de ejer.

  4. Brug syntaksen EXECUTE ('sql commands') AS USER = 'schema-owner' for at udføre dine SQL-kommandoer i konteksten af ​​det standardskema.

Følgende script demonstrerer dette:

--====== 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. 12c Adaptive planer i SQL Developer

  2. ved hjælp af (-) bindestreg i mysql tabelnavn

  3. Hvordan tilføjer man PostgreSQL-datakilde til WildFly 9.0?

  4. MySQL High Availability Framework Forklaret – Del III:Fejlscenarier