Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come risolvere "È necessario specificare un nome di correlazione per il set di righe di massa nella clausola from". in SQL Server

Se si verifica l'errore Msg 491, livello 16 "È necessario specificare un nome di correlazione per il set di righe in blocco nella clausola from" in SQL Server, è probabilmente perché si sta tentando di leggere un file senza utilizzare un nome di correlazione.

Quando usi OPENROWSET() funzione con il BULK opzione, devi fornire un nome di correlazione (noto anche come variabile di intervallo o alias) in FROM clausola.

Per correggere questo errore, fornisci semplicemente un nome/alias di correlazione per la tua query.

Esempio di errore

Ecco un esempio di codice che causa questo errore.

SELECT BulkColumn FROM OPENROWSET (
    BULK '/var/opt/mssql/bak/pets.json', 
    SINGLE_CLOB
    );

Risultato:

Msg 491, Level 16, State 1, Line 4
A correlation name must be specified for the bulk rowset in the from clause.

L'errore si è verificato perché ho dimenticato di includere il nome della correlazione.

La soluzione

Come accennato, per risolvere questo problema, tutto ciò che dobbiamo fare è fornire un nome di correlazione (noto anche come variabile di intervallo o alias).

SELECT BulkColumn FROM OPENROWSET (
    BULK '/var/opt/mssql/bak/pets.json', 
    SINGLE_CLOB
    ) AS MyAlias;

Risultato:

+--------------+
| BulkColumn   |
|--------------|
| { 
    "pets" : {
            "cats" : [
            { "id" : 1, "name" : "Fluffy", "sex" : "Female" },
            { "id" : 2, "name" : "Long Tail", "sex" : "Female" },
            { "id" : 3, "name" : "Scratch", "sex" : "Male" }
        ],
            "dogs" : [
            { "id" : 1, "name" : "Fetch", "sex" : "Male" },
            { "id" : 2, "name" : "Fluffy", "sex" : "Male" },
            { "id" : 3, "name" : "Wag", "sex" : "Female" }
        ]
    }
}              |
+--------------+