Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment réparer "Un nom de corrélation doit être spécifié pour l'ensemble de lignes en bloc dans la clause from." dans SQL Server

Si vous rencontrez l'erreur Msg 491, niveau 16 "Un nom de corrélation doit être spécifié pour l'ensemble de lignes en masse dans la clause from" dans SQL Server, c'est probablement parce que vous essayez de lire un fichier sans utiliser de nom de corrélation.

Lorsque vous utilisez le OPENROWSET() fonction avec BULK option, vous devez fournir un nom de corrélation (également appelé variable de plage ou alias) dans FROM clause.

Pour corriger cette erreur, fournissez simplement un nom/alias de corrélation pour votre requête.

Exemple d'erreur

Voici un exemple de code qui provoque cette erreur.

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

Résultat :

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

L'erreur s'est produite parce que j'ai oublié d'inclure le nom de la corrélation.

La solution

Comme mentionné, pour résoudre ce problème, il nous suffit de fournir un nom de corrélation (également appelé variable de plage ou alias).

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

Résultat :

+--------------+
| 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" }
        ]
    }
}              |
+--------------+