sql >> データベース >  >> RDS >> Sqlserver

ストアドプロシージャ内にデフォルトのスキーマを設定できますか?

    ここのさまざまな場所でこれを行う方法の一部がありますが、完全ではありません。これを行う方法は次のとおりです。

    1. スキーマごとに一意のログインとユーザーを作成する

    2. これらのユーザーをそれぞれの異なるスキーマの所有者にします。

    3. そのような各ユーザーのデフォルトスキーマを、そのユーザーが所有するスキーマに設定します。

    4. 構文EXECUTE ('sql commands') AS USER = 'schema-owner'を使用します そのデフォルトスキーマのコンテキストでSQLコマンドを実行します。

    次のスクリプトはこれを示しています:

    --====== 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. SQLServerで重複する行を検索する

    2. VMwareCloudインフラストラクチャ上のScaleGridPostgreSQL

    3. Dapper.NETを使用してデータベースにC#リストを挿入する方法

    4. MySQLレプリケーションのためのマルチクラウド展開