Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bisakah saya menetapkan skema default untuk dalam prosedur tersimpan?

Ada potongan-potongan bagaimana melakukan ini di berbagai tempat di sini, tetapi tidak semuanya. Caranya adalah:

  1. Buat login &pengguna unik untuk setiap skema

  2. Jadikan pengguna ini sebagai pemilik setiap skema yang berbeda.

  3. Tetapkan skema default setiap pengguna tersebut menjadi skema yang mereka miliki.

  4. Gunakan sintaks EXECUTE ('sql commands') AS USER = 'schema-owner' untuk menjalankan perintah SQL Anda dalam konteks skema default tersebut.

Skrip berikut menunjukkan ini:

--====== 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. Bagaimana Fungsi RIGHT() Bekerja di SQL Server (T-SQL)

  2. Tetapkan nama file secara dinamis ke string koneksi excel

  3. Apa itu @@TEXTSIZE di SQL Server?

  4. Temukan Kolom Partisi untuk Tabel yang Dipartisi di SQL Server (T-SQL)

  5. Panduan untuk CTE di SQL Server