MSSQLSERVER_207MSSQLSERVER_207

DettagliDetails

Nome prodottoProduct Name SQL ServerSQL Server
ID eventoEvent ID 207207
Origine eventoEvent Source MSSQLSERVERMSSQLSERVER
ComponenteComponent SQLEngineSQLEngine
Nome simbolicoSymbolic Name SQ_BADCOLSQ_BADCOL
Testo del messaggioMessage Text Il nome di colonna '%.ls' non è valido.Invalid column name '%.ls'.

SpiegazioneExplanation

L'errore di query può essere causato da uno dei problemi seguenti:This query error can be caused by one of the following problems.

  • Il nome di colonna è errato oppure la colonna non esiste in alcuna delle tabelle specificate.The column name is misspelled or the column does not exist in any of the specified tables.

  • Le regole di confronto del database rispettano la distinzione tra maiuscole e minuscole e la combinazione di maiuscole e minuscole del nome di colonna specificato nella query non corrisponde a quella della colonna definita nella tabella.The collation of the database is case-sensitive and the case of the column name specified in the query does not match the case of the column defined in the table. Ad esempio, se una colonna viene definita in una tabella come Cognome e nel database vengono usate regole di confronto con distinzione tra maiuscole e minuscole, le query che fanno riferimento alla colonna con COGNOME o cognome restituiranno l'errore 207 poiché il nome di colonna non corrisponde.For example, when a column is defined in a table as LastName and the database uses a case-sensitive collation, queries that refer to the column as Lastname or lastname will cause error 207 to return because the column name does not match.

  • A un alias di colonna, definito nella clausola SELECT, viene fatto riferimento in un'altra clausola, ad esempio una clausola WHERE o GROUP BY.A column alias, defined in the SELECT clause, is referenced in another clause such as a WHERE or GROUP BY clause. La query seguente, ad esempio, definisce l'alias di colonna Year nella clausola SELECT e fa riferimento all'alias nella clausola GROUP BY.For example, the following query defines the column alias Year in the SELECT clause and refers to it in the GROUP BY clause.

    USE AdventureWorks2012;  
    GO  
    SELECT DATEPART(yyyy,OrderDate) AS Year, SUM(TotalDue) AS Total  
    FROM Sales.SalesOrderHeader  
    GROUP BY Year;  
    

    A causa dell'ordine in cui le clausole di query vengono elaborate logicamente, l'esempio restituisce l'errore 207.Due to the order in which query clauses are logically processed, the example returns error 207. L'ordine di elaborazione è il seguente:The processing order is as follows:

    1. FROMFROM

    2. ONON

    3. JOINJOIN

    4. WHEREWHERE

    5. GROUP BYGROUP BY

    6. WITH CUBE o WITH ROLLUPWITH CUBE or WITH ROLLUP

    7. HAVINGHAVING

    8. SELECTSELECT

    9. DISTINCTDISTINCT

    10. ORDER BYORDER BY

    11. Torna all'inizioTOP

    Poiché un alias di colonna non viene definito fino a quando la clausola SELECT non viene elaborata, il nome di alias è sconosciuto al momento dell'elaborazione della clausola GROUP BY.Because a column alias is not defined until the SELECT clause is processed, the alias name is unknown when the GROUP BY clause is processed.

  • L'istruzione MERGE genera questo errore quando la clausola fa riferimento alle colonne nella tabella di origine, ma quest'ultima non restituisce alcuna riga nella clausola WHEN NOT MATCHED BY SOURCE.The MERGE statement raises this error when the clause references columns in the source table but no rows are returned by the source table in the WHEN NOT MATCHED BY SOURCE clause. L'errore si verifica poiché non è possibile accedere alle colonne della tabella di origine quando alla query non viene restituita alcuna riga.The error occurs because the columns in the source table cannot be accessed when no rows are returned to the query. La clausola WHEN NOT MATCHED BY SOURCE THEN UPDATE SET TargetTable.Col1 = SourceTable.Col1 può provocare ad esempio un errore nell'istruzione se non è possibile accedere a Col1 nella tabella di origine.For example, the clause WHEN NOT MATCHED BY SOURCE THEN UPDATE SET TargetTable.Col1 = SourceTable.Col1 may cause the statement to fail if Col1 in the source table is inaccessible.

Azione dell'utenteUser Action

Verificare le informazioni seguenti e correggere l'istruzione in base alle esigenze.Verify the following information and correct the statement as appropriate.

  • Presenza e ortografia corretta del nome di colonna nella tabella.The column name exists in the table and is spelled correctly. Nell'esempio seguente viene eseguita una query sulla vista del catalogo sys.columns per restituire tutti i nomi di colonna per una tabella specifica.The following example queries the sys.columns catalog view to return all column names for a given table.

    SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('schema_name.table_name');  
    
  • Distinzione tra maiuscole e minuscole delle regole di confronto del database.The case sensitivity of the database collation. L'istruzione seguente restituisce le regole di confronto del database specificato.The following statement returns the collation of the specified database.

    SELECT collation_name FROM sys.databases WHERE name = 'database_name';  
    

    L'abbreviazione CS nel nome delle regole di confronto indica che le regole di confronto rispettano la distinzione tra maiuscole e minuscole.The abbreviation CS in the collation name indicates the collation is case-sensitive. Latin1_General_CS_AS ad esempio è una regola di confronto con distinzione tra maiuscole e minuscole e distinzione tra caratteri accentati e non accentati.For example, Latin1_General_CS_AS is a case-sensitive and accent-sensitive collation. Modificare il nome di colonna in modo che corrisponda alla combinazione di maiuscole e minuscole del nome di colonna come definito nella tabella.Modify the column name to match the case of the column name as it is defined in the table.

  • Riferimento non corretto a un alias di colonna.A column alias is referenced incorrectly. Modificare l'istruzione ripetendo l'espressione che definisce l'alias nella clausola appropriata oppure utilizzando una tabella derivata.Modify the statement by repeating the expression that defines the alias in the appropriate clause or by using a derived table. Nell'esempio seguente vengono ripetute le espressioni che definiscono l'alias Year nella clausola GROUP BY.The following example repeats the expressions that define the Year alias in the GROUP BY clause.

    USE AdventureWorks2012;  
    GO  
    SELECT DATEPART(yyyy,OrderDate) AS Year ,SUM(TotalDue) AS Total  
    FROM Sales.SalesOrderHeader  
    GROUP BY DATEPART(yyyy,OrderDate);  
    

    Nell'esempio seguente viene utilizzata una tabella derivata per rendere disponibile il nome di alias ad altre clausole nella query.The following example uses a derived table to make the alias name available to other clauses in the query. Si noti che l'alias Year viene definito nella clausola FROM, che viene elaborata per prima. In questo modo l'alias può essere utilizzato in altre clausole nella query.Notice that the alias Year is defined in the FROM clause, which is processed first, and so makes the alias available for use in other clauses in the query.

    USE AdventureWorks2012;  
    GO  
    SELECT d.Year, SUM(TotalDue) AS Total  
    FROM (SELECT DATEPART(yyyy,OrderDate) AS Year, TotalDue  
          FROM Sales.SalesOrderHeader)AS d  
    GROUP BY Year;  
    
  • La clausola WHEN NOT MATCHED BY SOURCE nell'istruzione MERGE fa riferimento a un valore cui è possibile accedere.The WHEN NOT MATCHED BY SOURCE clause in the MERGE statement refers to a value that can be accessed. Modificare l'istruzione MERGE in modo che venga restituita almeno una riga dalla tabella di origine nella clausola WHEN NOT MATCHED BY SOURCE.Modify the MERGE statement so that at least one row is returned by the source table in the WHEN NOT MATCHED BY SOURCE clause. Può ad esempio essere necessario aggiungere o modificare la condizione di ricerca specificata per la clausola.For example, you might need to add or revise the search condition specified for the clause. In alternativa, è possibile modificare la clausola per specificare un valore che non fa riferimento alla tabella di origine,Alternatively, you can modify the clause to specify a value that does not reference the source table. Ad esempio, WHEN NOT MATCHED BY SOURCE THEN UPDATE SET TargetTable.Col1 = <expression, or other available value>.For example, WHEN NOT MATCHED BY SOURCE THEN UPDATE SET TargetTable.Col1 = <expression, or other available value>.

Vedere ancheSee Also

MERGE (Transact-SQL)MERGE (Transact-SQL)
FROM (Transact-SQL)FROM (Transact-SQL)
SELECT (Transact-SQL)SELECT (Transact-SQL)
UPDATE (Transact-SQL)UPDATE (Transact-SQL)