Dela via


sp_rename (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-analysslutpunkt i Microsoft FabricWarehouse i Microsoft Fabric

Ändrar namnet på ett användarskapade objekt i den aktuella databasen. Det här objektet kan vara en tabell, ett index, en kolumn, en aliasdatatyp eller microsoft

Användardefinierad typ av .NET Framework common language runtime (CLR).

Viktigt!

Vissa systemobjekt och Transact-SQL syntax stöds inte i serverlösa SQL-pooler i Azure Synapse Analytics, inklusive den här artikeln. Mer information finns i T-SQL-stöd.

Försiktighet

Om du ändrar en del av ett objektnamn kan skript och lagrade procedurer brytas. Vi rekommenderar att du inte använder den här instruktionen för att byta namn på lagrade procedurer, utlösare, användardefinierade funktioner eller vyer. i stället släpper du objektet och skapar det igen med det nya namnet.

Transact-SQL syntaxkonventioner

Syntax

Syntax för sp_rename i SQL Server och Azure SQL Database:

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

Syntax för sp_rename (förhandsversion) i Azure Synapse Analytics:

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

Syntax för sp_rename i Microsoft Fabric:

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

Argumentpunkter

[ @objname = ] "object_name"

Det aktuella kvalificerade eller icke-kvalificerade namnet på användarobjektet eller datatypen. Om objektet som ska byta namn är en kolumn i en tabell måste object_name finnas i kolumnen form table.column eller schema.table.column. Om objektet som ska byta namn är ett index måste object_name finnas i formuläret table.index eller schema.table.index. Om det objekt som ska byta namn är en begränsning måste object_name finnas i formuläret schema.constraint.

Citattecken är bara nödvändiga om ett kvalificerat objekt har angetts. Om ett fullständigt kvalificerat namn, inklusive ett databasnamn, anges måste databasnamnet vara namnet på den aktuella databasen. object_name är nvarchar(776), utan standard.

[ @newname = ] "new_name"

Det nya namnet på det angivna objektet. new_name måste vara ett endelsnamn och måste följa reglerna för identifierare. newname är sysname, utan standard.

Utlösarnamn kan inte börja med # eller ##.

Gäller för Informationslager i Microsoft Fabric:

  • Schemanamn får inte innehålla / eller \ sluta med en ..
  • Tabellnamn får inte innehålla / eller \ sluta med en ..

[ @objtype = ] "object_type"

Den typ av objekt som byts namn. object_type är varchar(13), med standardvärdet NULL, och kan vara ett av dessa värden.

Värde Beskrivning
COLUMN En kolumn som ska byta namn.
DATABASE En användardefinierad databas. Den här objekttypen krävs när du byter namn på en databas.
INDEX Ett användardefinierat index. Om du byter namn på ett index med statistik byter du även automatiskt namn på statistiken.
OBJECT Ett objekt av en typ som spåras i sys.objects. Object kan till exempel användas för att byta namn på objekt, inklusive begränsningar (CHECK, FOREIGN KEY, PRIMARY/UNIQUE KEY), användartabeller, kolumner, lagrade procedurer, infogade tabellvärdesfunktioner, tabellvärdesfunktioner och regler.
STATISTICS Gäller för: SQL Server 2012 (11.x) och senare och Azure SQL Database.

Statistik som skapats explicit av en användare eller skapats implicit med ett index. Om du byter namn på statistiken för ett index byter du även automatiskt namn på indexet.
USERDATATYPE En CLR-användardefinierad typ som lagts till genom att köra CREATE TYPE eller sp_addtype.

gäller för: Azure Synapse Analytics

  • I sp_rename (förhandsversion) för Azure Synapse Analytics COLUMN är ett obligatoriskt värde som anger att objekttypen som ska byta namn är en kolumn och alltid måste ingå i -instruktionen sp_rename . En kolumn kan bara byta namn om den inte är en distributionskolumn. sp_rename kan endast användas för att byta namn på en COLUMN i ett användarobjekt.

Gäller för: Microsoft Fabric

  • I sp_rename för lagret i Microsoft Fabric OBJECT är det enda värde som stöds för @objtype.
  • För sp_rename SQL-analysslutpunkten i Microsoft Fabric OBJECT är det enda värde som stöds för @objtype. Det går inte att byta namn på tabeller och kolumner.

Returnera kodvärden

0 (lyckades) eller ett icke-nolltal (fel).

Anmärkningar

Gäller för SQL Server (alla versioner som stöds) och Azure SQL Database:

  • sp_rename byter automatiskt namn på det associerade indexet när en PRIMÄRNYCKEL eller UNIK-begränsning byts namn. Om ett omdöpt index är kopplat till en PRIMARY KEY-begränsning byts även villkoret PRIMÄRNYCKEL automatiskt om av sp_rename.

  • sp_rename kan användas för att byta namn på primära och sekundära XML-index.

  • Om du byter namn på en lagrad procedur, funktion, vy eller utlösare ändras inte namnet på motsvarande objekt, antingen i definitionskolumnen i katalogvyn sys.sql_modules eller hämtas med hjälp av den OBJECT_DEFINITION inbyggda funktionen. Därför rekommenderar vi att sp_rename inte användas för att byta namn på dessa objekttyper. Släpp i stället och återskapa objektet med det nya namnet.

Gäller för SQL Server (alla versioner som stöds), Azure SQL Database och Azure Synapse Analytics:

  • Om du byter namn på ett objekt, till exempel en tabell eller kolumn, byter du inte automatiskt namn på referenser till objektet. Du måste ändra alla objekt som refererar till det omdöpta objektet manuellt. Om du till exempel byter namn på en tabellkolumn och den kolumnen refereras till i en utlösare måste du ändra utlösaren så att den återspeglar det nya kolumnnamnet. Använd sys.sql_expression_dependencies för att lista beroenden för objektet innan du byter namn på det.

  • Om du byter namn på en kolumn uppdateras inte metadata automatiskt för objekt som VÄLJER alla kolumner (med hjälp av ) från den *tabellen. Om du till exempel byter namn på en tabellkolumn och den kolumnen refereras till av en icke-schemabunden vy eller funktion som SELECTs alla kolumner (med hjälp av *), fortsätter metadata för vyn eller funktionen att återspegla det ursprungliga kolumnnamnet. Uppdatera metadata med hjälp av sp_refreshsqlmodule eller sp_refreshview.

  • Du kan bara ändra namnet på ett objekt eller en datatyp i den aktuella databasen. Namnen på de flesta systemdatatyper och systemobjekt kan inte ändras.

  • Om du använder fler än 128 tecken för det nya namnet används endast de första 128 tecknen och resten trunkeras.

Gäller för Azure Synapse Analytics:

  • I Azure Synapse Analytics sp_rename finns i förhandsversion för dedikerade SQL-pooler.

Behörigheter

Om du vill byta namn på objekt, kolumner och index kräver du ALTER-behörighet för objektet. Om du vill byta namn på användartyper kräver kontrollbehörighet för typen. Om du vill byta namn på en databas måste du ha medlemskap i de fasta serverrollerna sysadmin eller dbcreator . Om du vill byta namn på en transaktionsregistertabell krävs ALTER LEDGER-behörighet.

Exempel

A. Byt namn på en tabell

I följande exempel byter du namn på tabellen SalesTerritory till SalesTerr i Sales-schemat.

USE AdventureWorks2022;
GO
EXEC sp_rename 'Sales.SalesTerritory', 'SalesTerr';
GO

B. Byt namn på en kolumn

I följande exempel byter kolumnen i SalesTerritory tabellen namn TerritoryID till TerrID.

USE AdventureWorks2022;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO

C. Byt namn på ett index

I följande exempel byter indexet namn till IX_ProductVendor_VendorIDIX_VendorID.

USE AdventureWorks2022;
GO
EXEC sp_rename N'Purchasing.ProductVendor.IX_ProductVendor_VendorID', N'IX_VendorID', N'INDEX';
GO

D. Byt namn på en aliasdatatyp

I följande exempel byter du namn på Phone aliasdatatypen till Telephone.

USE AdventureWorks2022;
GO
EXEC sp_rename N'Phone', N'Telephone', N'USERDATATYPE';
GO

E. Ändra namn på begränsningar

I följande exempel byter du namn på en PRIMARY KEY-begränsning, en CHECK-begränsning och en FOREIGN KEY-begränsning. När du byter namn på en begränsning måste det schema som villkoret tillhör anges.

USE AdventureWorks2022;
GO
-- Return the current Primary Key, Foreign Key and Check constraints for the Employee table.
SELECT name, SCHEMA_NAME(schema_id) AS schema_name, type_desc
FROM sys.objects
WHERE parent_object_id = (OBJECT_ID('HumanResources.Employee'))
AND type IN ('C','F', 'PK');
GO

-- Rename the primary key constraint.
EXEC sp_rename 'HumanResources.PK_Employee_BusinessEntityID', 'PK_EmployeeID';
GO

-- Rename a check constraint.
EXEC sp_rename 'HumanResources.CK_Employee_BirthDate', 'CK_BirthDate';
GO

-- Rename a foreign key constraint.
EXEC sp_rename 'HumanResources.FK_Employee_Person_BusinessEntityID', 'FK_EmployeeID';

-- Return the current Primary Key, Foreign Key and Check constraints for the Employee table.
SELECT name, SCHEMA_NAME(schema_id) AS schema_name, type_desc
FROM sys.objects
WHERE parent_object_id = (OBJECT_ID('HumanResources.Employee'))
AND type IN ('C','F', 'PK');
GO
name                                  schema_name        type_desc
------------------------------------- ------------------ ----------------------
FK_Employee_Person_BusinessEntityID   HumanResources     FOREIGN_KEY_CONSTRAINT
PK_Employee_BusinessEntityID          HumanResources     PRIMARY_KEY_CONSTRAINT
CK_Employee_BirthDate                 HumanResources     CHECK_CONSTRAINT
CK_Employee_MaritalStatus             HumanResources     CHECK_CONSTRAINT
CK_Employee_HireDate                  HumanResources     CHECK_CONSTRAINT
CK_Employee_Gender                    HumanResources     CHECK_CONSTRAINT
CK_Employee_VacationHours             HumanResources     CHECK_CONSTRAINT
CK_Employee_SickLeaveHours            HumanResources     CHECK_CONSTRAINT

(7 row(s) affected)

name                                  schema_name        type_desc
------------------------------------- ------------------ ----------------------
FK_Employee_ID                        HumanResources     FOREIGN_KEY_CONSTRAINT
PK_Employee_ID                        HumanResources     PRIMARY_KEY_CONSTRAINT
CK_BirthDate                          HumanResources     CHECK_CONSTRAINT
CK_Employee_MaritalStatus             HumanResources     CHECK_CONSTRAINT
CK_Employee_HireDate                  HumanResources     CHECK_CONSTRAINT
CK_Employee_Gender                    HumanResources     CHECK_CONSTRAINT
CK_Employee_VacationHours             HumanResources     CHECK_CONSTRAINT
CK_Employee_SickLeaveHours            HumanResources     CHECK_CONSTRAINT

(7 row(s) affected)

F. Byt namn på statistik

Följande exempel skapar ett statistikobjekt med namnet contactMail1 och byter sedan namn på statistiken till NewContact med hjälp sp_renameav . När du byter namn på statistik måste objektet anges i formatet "schema.table.statistics_name".

CREATE STATISTICS ContactMail1
    ON Person.Person (BusinessEntityID, EmailPromotion)
    WITH SAMPLE 5 PERCENT;

EXEC sp_rename 'Person.Person.ContactMail1', 'NewContact','Statistics';

Exempel: Azure Synapse Analytics

G. Byt namn på en kolumn

I följande exempel byter kolumnen i table1 tabellen namn c1 till col1.

Anmärkning

Den här Azure Synapse Analytics-funktionen är fortfarande i förhandsversion för dedikerade SQL-pooler och är för närvarande endast tillgänglig för objekt i dbo schemat.

CREATE TABLE table1 (c1 INT, c2 INT);
EXEC sp_rename 'table1.c1', 'col1', 'COLUMN';
GO

H. Byt namn på ett objekt

I följande exempel byter du namn på tabellen dbo.table1 till dbo.table2, med hjälp av OBJECT typen .

EXEC sp_rename @objname = 'dbo.table1', @newname = 'table2', @objtype = 'OBJECT';