sql >> Databáze >  >> RDS >> Sqlserver

Přejmenování uživatelem definovaného datového typu v SQL Server (T-SQL)

V SQL Server můžete použít sp_rename uložená procedura k přejmenování uživatelem vytvořeného objektu v aktuální databázi, včetně uživatelem definovaného datového typu.

Syntaxe

Syntaxe vypadá takto:

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

Kde old_datatype je název uživatelem definovaného datového typu, který chcete přejmenovat, a new_datatype je nové jméno, které mu chcete dát.

Příklad

Podívejme se na aktuální uživatelem definované datové typy v naší databázi.

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

Výsledek:

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

Máme jeden uživatelsky definovaný datový typ s názvem clientid .

Přejmenujme jej na clientcode .

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

Spuštěním se přejmenuje na clientcode . Může se zobrazit následující zpráva:

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

To nás v podstatě upozorňuje na to, že pokud máme nějaké skripty uložených procedur, které odkazují na náš přejmenovaný objekt, pak se pokazí a budeme je muset aktualizovat.

Možná se ptáte, jestli to znamená, že všechny existující sloupce, které používají tento datový typ, budou nyní nefunkční?

Naštěstí by stávající kolony měly být v pořádku.

Po přejmenování uživatelem definovaného datového typu budou všechny sloupce, které používají tento datový typ, nadále používat tento datový typ s novým názvem. Veškerá omezení typu dat (jako je délka atd.) budou nadále vynucována.

Nyní se znovu podíváme na náš seznam uživatelsky definovaných datových typů:

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

Výsledek:

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

Podle očekávání byl přejmenován podle specifikace.


  1. Nelze svázat argument na indexu 2, protože index je mimo rozsah

  2. Jak deklarovat proměnnou v MySQL?

  3. Upgrade na PostgreSQL13

  4. SQLiteException:neznámá databáze