Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Czy mogę ustawić domyślny schemat dla procedury składowanej?

Są tu fragmenty, jak to zrobić w różnych miejscach, ale nie do końca. Sposobem na to jest:

  1. Utwórz unikalny login i użytkownika dla każdego schematu

  2. Uczyń tych użytkowników właścicielami każdego innego schematu.

  3. Ustaw domyślny schemat każdego takiego użytkownika na schemat, którego są właścicielami.

  4. Użyj składni EXECUTE ('sql commands') AS USER = 'schema-owner' aby wykonać twoje polecenia SQL w kontekście tego domyślnego schematu.

Poniższy skrypt to demonstruje:

--====== 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. AKTUALIZUJ, jeśli istnieje, wstawiaj w SQL Server 2008

  2. SQL Server — krótkie obwody zapytań?

  3. Funkcje zdefiniowane przez użytkownika programu SQL Server

  4. DAY() Przykłady w SQL Server (T-SQL)

  5. Czy mogę mieć klucz obcy odwołujący się do kolumny w widoku w SQL Server?