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

MSSQLのすべてのテーブル、ビュー、およびストアドプロシージャのスキーマを変更する方法

    はい、可能です。

    データベースオブジェクトのスキーマを変更するには、次のSQLスクリプトを実行する必要があります。

    ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.ObjectName
    

    ObjectNameは、テーブル、ビュー、またはストアドプロシージャの名前です。問題は、指定されたスキーマ名を持つすべてのデータベースオブジェクトのリストを取得することであるようです。ありがたいことに、すべてのデータベースオブジェクトを格納するsys.Objectsという名前のシステムテーブルがあります。次のクエリは、このタスクを完了するために必要なすべてのSQLスクリプトを生成します。

    SELECT 'ALTER SCHEMA NewSchemaName TRANSFER [' + SysSchemas.Name + '].[' + DbObjects.Name + '];'
    FROM sys.Objects DbObjects
    INNER JOIN sys.Schemas SysSchemas ON DbObjects.schema_id = SysSchemas.schema_id
    WHERE SysSchemas.Name = 'OldSchemaName'
    AND (DbObjects.Type IN ('U', 'P', 'V'))
    

    タイプ「U」はユーザーテーブルを示し、「V」はビューを示し、「P」はストアドプロシージャを示します。

    上記のスクリプトを実行すると、あるスキーマから別のスキーマにオブジェクトを転送するために必要なSQLコマンドが生成されます。このようなもの:

    ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.CONTENT_KBArticle;
    ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.Proc_Analytics_Statistics_Delete;
    ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.Proc_CMS_QueryProvider_Select;
    ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.COM_ShoppingCartSKU;
    ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.CMS_WebPart;
    ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.Polls_PollAnswer;
    

    これで、生成されたこれらすべてのクエリを実行して、転送操作を完了することができます。



    1. リレーショナルデータベースと非リレーショナルデータベース:違いは何ですか?

    2. データベーステーブルの事前定義された値からの値を含むことができるフィールドに使用するデータ型は何ですか?

    3. すべての列、すべてのテーブルで特定の値を検索します

    4. MySQLはLIMIT付きの結果の合計を選択します