Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como corrigir “Um nome de correlação deve ser especificado para o conjunto de linhas em massa na cláusula from.” no SQL Server


Se você encontrar o erro Msg 491, Level 16 "Um nome de correlação deve ser especificado para o conjunto de linhas em massa na cláusula from" no SQL Server, provavelmente é porque você está tentando ler um arquivo sem usar um nome de correlação.

Quando você usa o OPENROWSET() função com o BULK opção, você deve fornecer um nome de correlação (também conhecido como variável de intervalo ou alias) no arquivo FROM cláusula.

Para corrigir esse erro, basta fornecer um nome/alias de correlação para sua consulta.

Exemplo do erro


Aqui está um exemplo de código que causa esse erro.
SELECT BulkColumn FROM OPENROWSET (
    BULK '/var/opt/mssql/bak/pets.json', 
    SINGLE_CLOB
    );

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

O erro ocorreu porque esqueci de incluir o nome da correlação.

A solução


Como mencionado, para corrigir esse problema, tudo o que precisamos fazer é fornecer um nome de correlação (também conhecido como variável de intervalo ou alias).
SELECT BulkColumn FROM OPENROWSET (
    BULK '/var/opt/mssql/bak/pets.json', 
    SINGLE_CLOB
    ) AS MyAlias;

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