sql >> Databasteknik >  >> RDS >> Sqlserver

Kan jag ställa in ett standardschema för inom en lagrad procedur?

Det finns stycken om hur man gör detta på olika ställen här, men inte helt. Sättet att göra detta är:

  1. Gör en unik inloggning och användare för varje schema

  2. Gör dessa användare till ägare av varje schema.

  3. Ställ in varje sådan användares standardschema att vara det schema som de äger.

  4. Använd syntaxen EXECUTE ('sql commands') AS USER = 'schema-owner' för att köra dina SQL-kommandon i sammanhanget för det standardschemat.

Följande skript visar detta:

--====== 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. Fördelar med att använda SQL Ordinal Position Notation?

  2. Hur skapar man enkel suddig sökning med endast PostgreSQL?

  3. Min Välj SUM-fråga returnerar null. Det bör returnera 0

  4. En anslutning upprättades med servern, men sedan uppstod ett fel under handskakningen före inloggningen