Identificatori di database

Si applica a:SQL Server database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics AnalyticsPlatform System (PDW)SQL analytics endpoint in Microsoft FabricWarehouse in Microsoft Fabric

Il nome di un oggetto di database rappresenta l'identificatore dell'oggetto stesso. Tutti gli elementi in Microsoft SQL Server possono avere un identificatore. ad esempio server, database e oggetti di database quali tabelle, viste, colonne, indici, trigger, procedure, vincoli, regole e così via. Gli identificatori sono richiesti con la maggior parte degli oggetti. Per alcuni oggetti, quali i vincoli, sono facoltativi.

L'identificatore viene creato in fase di definizione dell'oggetto e viene successivamente utilizzato 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. Il vincolo PRIMARY KEY è privo di identificatore.

Le regole di confronto di un identificatore dipendono dal livello nel quale viene definito. Agli identificatori degli oggetti a livello di istanza, quali gli account di accesso e i nomi di database, vengono assegnate le regole di confronto predefinite dell'istanza. Agli identificatori degli oggetti di un database, quali tabelle, viste e nomi di colonna, vengono assegnate le regole di confronto predefinite del database. Ad esempio, due tabelle i cui nomi si differenziano soltanto per l'utilizzo del maiuscolo e del minuscolo possono essere create in un database con regole di confronto in cui l'uso di maiuscole e minuscole è rilevante, ma non in un database con regole di confronto in cui l'uso di maiuscole e minuscole non è rilevante.

Nota

I nomi delle variabili o i parametri delle funzioni e delle stored procedure devono essere conformi alle regole per gli identificatori Transact-SQL.

Classi di identificatori

Esistono due classi di identificatori:

  • Identificatori regolari
    Sono conformi alle regole relative al formato degli identificatori. Gli identificatori regolari non sono delimitati quando vengono usati nelle istruzioni Transact-SQL.

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

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

Gli identificatori che non sono conformi a tutte le regole per gli identificatori devono essere delimitati in un'istruzione Transact-SQL. Ad esempio:

USE AdventureWorks2022;
GO
CREATE TABLE [SalesOrderDetail Table] --Identifier contains a space and uses a reserved keyword.
(
    [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 per gli identificatori regolari

I nomi di variabili, funzioni e stored procedure devono essere conformi alle regole seguenti per gli identificatori Transact-SQL.

  1. Il primo carattere deve essere uno dei seguenti:

    • Una lettera definita dallo standard Unicode 3,2, ovvero i caratteri dell'alfabeto latino a-z e A-Z e i caratteri di altre lingue.

    • Il carattere di sottolineatura (_), il simbolo di chiocciola (@) o il simbolo di cancelletto (#).

      Alcuni simboli all'inizio di un identificatore hanno un significato speciale in SQL Server. Un identificatore regolare che inizia con il carattere @ indica sempre una variabile locale o un parametro e non può essere utilizzato per il nome di un tipo di oggetto diverso. il carattere # indica una tabella o una procedura temporanea, mentre due simboli di cancelletto (##) indicano 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.

      Alcune funzioni Transact-SQL hanno nomi che iniziano con segni double (@@). Per evitare confusione in merito a tali funzioni, è consigliabile non usare nomi che iniziano con @@.

  2. I caratteri successivi possono includere gli elementi seguenti:

    • Lettere definite nello standard Unicode 3,2.

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

    • Simbolo di simbolo (@), segno di dollaro ($), segno di numero (#) o carattere di sottolineatura (_).

  3. L'identificatore non deve essere una parola riservata Transact-SQL. SQL Server riserva sia le versioni maiuscole che minuscole delle parole riservate. Quando gli identificatori vengono usati nelle istruzioni Transact-SQL, gli identificatori che non sono conformi a queste regole devono essere delimitati da virgolette doppie o parentesi quadre. Le parole riservate dipendono dal livello di compatibilità del database. Questo livello può essere impostato usando l'istruzione ALTER DATABASE .

  4. Non sono consentiti spazi incorporati o caratteri speciali.

  5. Non sono consentiti caratteri supplementari.

Quando gli identificatori vengono usati nelle istruzioni Transact-SQL, gli identificatori che non sono conformi a queste regole devono essere delimitati da virgolette doppie o parentesi quadre.

Nota

Alcune regole relative al formato degli identificatori regolari dipendono dal livello di compatibilità del database. È possibile impostare tale livello con ALTER DATABASE.

Regole di confronto del catalogo in database SQL di Azure

Non è possibile modificare o impostare le regole di confronto del server logico in database SQL di Azure, ma è 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. Entrambe le regole di confronto possono essere specificate in modo indipendente quando si crea il database nel portale di Azure, in T-SQL con CREATE DATABA edizione Standard, in PowerShell con New-AzSqlDatabase.

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

Passaggi successivi