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

SQL Server(T-SQL)でユーザー定義データ型の名前を変更する

    SQL Serverでは、sp_renameを使用できます ユーザー定義のデータ型を含む、現在のデータベースでユーザーが作成したオブジェクトの名前を変更するストアドプロシージャ。

    構文

    構文は次のようになります:

    EXEC sp_rename 'old_datatype', 'new_datatype', 'USERDATATYPE';

    old_datatypeの場所 名前を変更するユーザー定義のデータ型の名前であり、new_datatype 付けたい新しい名前です。

    データベース内の現在のユーザー定義のデータ型を見てみましょう。

    SELECT 
      name,
      max_length,
      [precision],
      scale,
      is_user_defined
    FROM sys.types
    WHERE is_user_defined = 1;

    結果:

     +----------+--------------+-------------+---------+-------------------+
     | name     | max_length   | precision   | scale   | is_user_defined   |
     |----------+--------------+-------------+---------+-------------------|
     | clientid | 8            | 0           | 0       | 1                 |
     +----------+--------------+-------------+---------+-------------------+ 

    clientidという1つのユーザー定義データ型があります 。

    名前をclientcodeに変更しましょう 。

    EXEC sp_rename 'clientid', 'clientcode', 'USERDATATYPE';

    名前をclientcodeに変更する実行 。次のメッセージが表示される場合があります:

    Caution: Changing any part of an object name could break scripts and stored procedures.

    これにより、基本的に、名前を変更したオブジェクトを参照するストアドプロシージャのスクリプトがあると、それらが壊れて更新する必要があるという注意が必要になります。

    これは、このデータ型を使用する既存の列が壊れることを意味するのではないかと思うかもしれません。

    幸い、既存の列は問題ないはずです。

    ユーザー定義のデータ型の名前を変更した後、そのデータ型を使用する列は、引き続きそのデータ型を新しい名前で使用します。データ型の制限(長さなど)は引き続き適用されます。

    次に、ユーザー定義のデータ型のリストをもう一度確認しましょう。

    SELECT 
      name,
      max_length,
      [precision],
      scale,
      is_user_defined
    FROM sys.types
    WHERE is_user_defined = 1;

    結果:

    +------------+--------------+-------------+---------+-------------------+
     | name       | max_length   | precision   | scale   | is_user_defined   |
     |------------+--------------+-------------+---------+-------------------|
     | clientcode | 8            | 0           | 0       | 1                 |
     +------------+--------------+-------------+---------+-------------------+ 

    予想どおり、指定どおりに名前が変更されました。


    1. SQLServerのメッセージ8116「引数データ型の日付が部分文字列関数の引数1に対して無効です」を修正しました

    2. plpgsql変数を使用してn_distinctを設定するときにエラーが発生しました

    3. herokuで.sqlスクリプトを実行する方法は?

    4. OracleデータベースのLIMIT句を使用したPL/SQL一括収集