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

Přejmenujte omezení CHECK v SQL Server pomocí T-SQL

Můžete použít sp_rename uložená procedura systému k přejmenování CHECK omezení na serveru SQL.

Účelem této uložené procedury je umožnit vám přejmenovat uživatelem vytvořené objekty v aktuální databázi. Můžete jej tedy použít i k přejmenování jiných objektů, jako jsou tabulky, sloupce, aliasové datové typy atd.

Syntaxe

Syntaxe sp_rename vypadá takto:

sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'   
    [ , [ @objtype = ] 'object_type' ]

Takže váš kód by mohl vypadat nějak takto:

sp_rename 'schema_name.old_constraint_name', 'new_constraint_name';

Všimněte si, že v dokumentaci společnosti Microsoft je uvedeno, že při přejmenování omezení musíte kvalifikovat existující název názvem schématu.

Následující příklad ukazuje, jak přejmenovat CHECK omezení.

Příklad 1 – Vyberte omezení pro přejmenování

Nejprve si vyjmenujme CHECK omezení v databázi, takže se můžeme rozhodnout, kterou přejmenovat.

SELECT 
  name,
  SCHEMA_NAME(schema_id) AS 'Schema',
  OBJECT_NAME(parent_object_id) AS 'Table',
  definition
FROM sys.check_constraints;

Výsledek:

+-----------------+----------+----------------+----------------------------------------+
| name            | Schema   | Table          | definition                             |
|-----------------+----------+----------------+----------------------------------------|
| chkPrice        | dbo      | ConstraintTest | ([Price]>(0))                          |
| chkValidEndDate | dbo      | ConstraintTest | ([EndDate]>=[StartDate])               |
| chkTeamSize     | dbo      | ConstraintTest | ([TeamSize]>=(5) AND [TeamSize]<=(20)) |
| chkJobTitle     | dbo      | Occupation     | ([JobTitle]<>'Digital Nomad')          |
+-----------------+----------+----------------+----------------------------------------+

Pojďme přejmenovat druhé omezení ( chkValidEndDate ).

Odstraníme Platné část, takže se z ní stane pouze chkEndDate .

Příklad 2 – Přejmenování omezení

Spusťte toto pro přejmenování omezení.

sp_rename 'dbo.chkValidEndDate', 'chkEndDate';

Takže na prvním místě je staré (stávající) jméno, následované novým jménem.

Takže teď, když vyberu všechny CHECK omezení, dostanu následující výsledek.

SELECT 
  name,
  SCHEMA_NAME(schema_id) AS 'Schema',
  OBJECT_NAME(parent_object_id) AS 'Table',
  definition
FROM sys.check_constraints;

Výsledek:

+-------------+----------+----------------+----------------------------------------+
| name        | Schema   | Table          | definition                             |
|-------------+----------+----------------+----------------------------------------|
| chkPrice    | dbo      | ConstraintTest | ([Price]>(0))                          |
| chkEndDate  | dbo      | ConstraintTest | ([EndDate]>=[StartDate])               |
| chkTeamSize | dbo      | ConstraintTest | ([TeamSize]>=(5) AND [TeamSize]<=(20)) |
| chkJobTitle | dbo      | Occupation     | ([JobTitle]<>'Digital Nomad')          |
+-------------+----------+----------------+----------------------------------------+

Název omezení byl změněn.

Jak již bylo zmíněno, sp_rename uložená procedura není omezena pouze na CHECK omezení. Přesně stejnou syntaxi můžete použít k přejmenování omezení cizího klíče, tabulky, sloupce, datového typu aliasu nebo jakéhokoli jiného uživatelem definovaného objektu.

Společnost Microsoft však nedoporučuje přejmenovávat uložené procedury, spouštěče, uživatelem definované funkce nebo pohledy. V takových případech společnost Microsoft doporučuje místo toho objekt zrušit a znovu jej vytvořit s novým názvem.


  1. Získejte základní sloupce zobrazení na základě sady výsledků

  2. Příklad replikace Oracle Streams krok za krokem

  3. PostgreSQL:Auto-inkrement založený na vícesloupcovém jedinečném omezení

  4. Použití proměnné periody v intervalu v Postgresu