Condividi tramite


Identificatori di database

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsPiattaforma di analisi (PDW)Endpoint di analisi SQL in Microsoft FabricMagazzino in Microsoft FabricDatabase SQL in Microsoft Fabric

Il nome di un oggetto di database rappresenta l'identificatore dell'oggetto stesso.

Server, database e oggetti di database, come tabelle, viste, colonne, indici, trigger, procedure, vincoli e regole, possono avere identificatori. La maggior parte degli oggetti richiede identificatori, ma alcuni oggetti, ad esempio vincoli, li rendono facoltativi.

Quando si definisce l'oggetto, si crea un identificatore di oggetto. Utilizzare l'identificatore per fare riferimento all'oggetto . Ad esempio, l'istruzione seguente crea una tabella a cui viene associato l'identificatore TableXe due colonne a cui vengono associati gli identificatori KeyCol e Description:

CREATE TABLE TableX (
    KeyCol INT PRIMARY KEY,
    Description NVARCHAR(80)
);

La tabella include inoltre un vincolo senza nome. Al vincolo di chiave primaria non è associato alcun identificatore, quindi viene assegnato un nome generato dal sistema, ad PK__TableX__D7CB9CCCEEF0806Cesempio , che è possibile osservare nelle viste dei metadati di sistema, ad sys.key_constraintsesempio .

I nomi dei vincoli e altri oggetti con ambito schema devono essere univoci all'interno di uno schema del database. Ad esempio, due vincoli di chiave primaria non possono condividere un nome. Tuttavia, i nomi delle colonne devono essere univoci solo all'interno di ogni tabella, non all'interno dello schema.

Le regole di confronto di un identificatore dipendono dal livello in cui viene definito.

  • Le regole di confronto predefinite dell'istanza vengono assegnate agli identificatori di oggetti a livello di istanza, ad esempio account di accesso e nomi di database.
  • Le regole di confronto predefinite del database vengono assegnate agli identificatori di oggetti in un database, ad esempio tabelle, viste e nomi di colonna. Ad esempio, è possibile creare due tabelle con nomi diversi solo nel caso in un database con regole di confronto con distinzione tra maiuscole e minuscole, ma non è possibile crearle in un database con regole di confronto senza distinzione tra maiuscole e minuscole.

Note

È necessario che i nomi di variabili o i parametri di funzioni e stored procedure siano conformi alle regole relative agli identificatori Transact-SQL.

Classi di identificatori

Esistono due classi di identificatori:

  • Gli identificatori regolari sono conformi alle regole per il formato degli identificatori. Gli identificatori regolari non vengono delimitati quando vengono utilizzati in istruzioni Transact-SQL.

    USE AdventureWorks2022;
    GO
    
    SELECT *
    FROM HumanResources.Employee
    WHERE NationalIDNumber = 153479919;
    
  • Gli identificatori delimitati sono racchiusi tra virgolette doppie " o parentesi quadre ([ e ]). Gli identificatori conformi alle regole relative al formato degli identificatori possono non essere delimitati. Per esempio:

    USE AdventureWorks2022;
    GO
    
    SELECT *
    FROM [HumanResources].[Employee] --Delimiter is optional.
    WHERE [NationalIDNumber] = 153479919 --Delimiter is optional.
    

All'interno di un'istruzione Transact-SQL è necessario che gli identificatori non conformi alle regole relative agli identificatori siano delimitati. Per esempio:

USE AdventureWorks2022;
GO

--Identifier contains a space and uses a reserved keyword.
CREATE TABLE [SalesOrderDetail Table] (
    [Order] INT NOT NULL,
    [SalesOrderDetailID] INT IDENTITY(1, 1) NOT NULL,
    [OrderQty] SMALLINT NOT NULL,
    [ProductID] INT NOT NULL,
    [UnitPrice] MONEY NOT NULL,
    [UnitPriceDiscount] MONEY NOT NULL,
    [ModifiedDate] DATETIME NOT NULL,
    CONSTRAINT [PK_SalesOrderDetail_Order_SalesOrderDetailID] PRIMARY KEY CLUSTERED (
        [Order] ASC,
        [SalesOrderDetailID] ASC
    )
);
GO

SELECT *
FROM [SalesOrderDetail Table] --Identifier contains a space and uses a reserved keyword.
WHERE [Order] = 10; --Identifier is a reserved keyword.

Sia gli identificatori regolari che quelli delimitati devono includere da 1 a 128 caratteri. Gli identificatori delle tabelle temporanee locali possono includere al massimo 116 caratteri.

Regole relative agli identificatori regolari

I nomi di variabili, funzioni e stored procedure devono seguire queste regole per gli identificatori di Transact-SQL.

  1. Il primo carattere deve essere uno dei caratteri seguenti:

    • Una lettera definita dallo standard Unicode 3,2, La definizione Unicode delle lettere include i caratteri dell'alfabeto latino da a a z, da A a Z, e anche i caratteri di altre lingue.

    • Il simbolo underscore (_), la chiocciola (@) o il cancelletto (#).

      Alcuni caratteri utilizzati all'inizio di un identificatore assumono un significato particolare in SQL Server. Un identificatore regolare che inizia con il simbolo della chiocciola indica sempre una variabile locale o un parametro e non può essere utilizzato per il nome di un tipo di oggetto diverso. Un identificatore che inizia con un carattere di numero (#) denota una tabella o procedura temporanea. Un identificatore che inizia con un doppio cancelletto (##) denota un oggetto temporaneo globale. Nonostante sia possibile usare uno o due simboli di cancelletto all'inizio dei nomi di altri tipi di oggetti, è consigliabile non adottare questa tecnica.

      I nomi di alcune funzioni Transact-SQL iniziano con due simboli di chiocciola (@@). Per evitare confusione con queste funzioni, non usare nomi che iniziano con @@.

  2. I caratteri successivi possono includere il seguente elenco:

    • Lettere definite nello standard Unicode 3,2.

    • Numeri decimali inclusi nell'alfabeto Latino di base o in altri alfabeti nazionali.

    • Il simbolo di chiocciola (@), il simbolo di dollaro ($), il simbolo di cancelletto (#) o il simbolo tratto basso (_).

  3. L'identificatore non deve essere una parola riservata Transact-SQL. SQL Server riserva sia le versioni maiuscole sia quelle minuscole delle parole riservate. Quando si utilizzano identificatori nelle istruzioni Transact-SQL, è necessario delimitare gli identificatori che non rispettano queste regole usando virgolette doppie o parentesi quadre. Le parole riservate dipendono dal livello di compatibilità del database. Impostare il livello di compatibilità del database utilizzando l'istruzione ALTER DATABASE compatibility level.

  4. Non usare spazi incorporati o caratteri speciali.

  5. Non usare caratteri supplementari.

Quando si utilizzano identificatori nelle istruzioni Transact-SQL, è necessario delimitare gli identificatori che non rispettano queste regole usando virgolette doppie o parentesi quadre.

Alcune regole relative al formato degli identificatori regolari dipendono dal livello di compatibilità del database.

Collazione del catalogo del database SQL di Azure

Non è possibile modificare o impostare le regole di confronto del server logico in database SQL di Azure. Tuttavia, è possibile configurare separatamente le regole di confronto di ogni database per i dati nel database e per il catalogo. Le regole di confronto del catalogo determinano le regole di confronto per i metadati di sistema, ad esempio gli identificatori di oggetto. È possibile specificare entrambe le regole di confronto in modo indipendente quando si crea il database nel portale di Azure, in T-SQL con CREATE DATABASE o in PowerShell con New-AzSqlDatabase.

Per informazioni dettagliate ed esempi, vedere CREATE DATABASE. Specificare le regole di confronto per il database (COLLATE) e le regole di confronto del catalogo per il sistema e i metadati e gli identificatori di oggetto (CATALOG_COLLATION).

Regole di collatione della catalogazione nel database SQL in Microsoft Fabric

Attualmente, per impostazione predefinita le regole di confronto di un database SQL in Fabric sono SQL_Latin1_General_CP1_CI_AS, ma possono essere configurate durante la distribuzione. Le regole di confronto non possono essere aggiornate dopo la distribuzione. Le collazioni sulle singole colonne sono supportate. Per altre informazioni sulle opzioni di distribuzione, vedere Opzioni per creare un database SQL in Fabric.