MSSQLSERVER_207

platí pro:SQL Server

Podrobnosti

Attribute Value
Název produktu SQL Server
ID události 207
Zdroj události MSSQLSERVER
Součást SQLEngine
Symbolický název SQ_BADCOL
Text zprávy Neplatný název sloupce%.*ls.

Vysvětlení

Tato chyba dotazu může být způsobena jedním z následujících problémů.

  • Název sloupce je chybně napsaný nebo sloupec neexistuje v žádné ze specifikovaných tabulek.

  • Kolace databáze je rozlišující velikost písmen a případ názvu sloupce uvedeného v dotazu neodpovídá případu sloupce definovaného v tabulce. Například když je sloupec v tabulce definován jako Příjmení a databáze používá sortaci rozlišující písmena (case-cutit), dotazy, které sloupec označují jako Příjmení nebo příjmení , způsobí vrácení chyby 207, protože název sloupce nesedí.

  • Sloupcový alias, definovaný v klauzuli SELECT, je odkazován v jiné klauzuli, například v klauzuli WHERE nebo GROUP BY. Například následující dotaz definuje sloupcový alias Year v klauzuli SELECT a odkazuje na něj v klauzuli GROUP BY.

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

    Kvůli pořadí, v jakém jsou dotazovací klauzule logicky zpracovávány, příklad vrací chybu 207. Pořadí zpracování je následující:

    1. FROM

    2. Zapnuto

    3. JOIN

    4. WHERE

    5. SESKUPIT PODLE

    6. S CUBE nebo s ROLLUPEM

    7. HAVING

    8. SELECT

    9. UNIKÁTNÍ

    10. ŘADIT PODLE

    11. TOP

    Protože sloupcový alias není definován, dokud není zpracována klauzule SELECT, jeho název není znám při zpracování klauzule GROUP BY.

  • Tvrzení tuto chybu vyvolává, MERGE když klauzule <merge_matched> odkazuje na sloupce ve zdrojové tabulce, ale v klauzuli WHEN NOT MATCHED BY SOURCE nejsou vráceny žádné řádky. Chyba nastává, protože sloupce ve zdrojové tabulce nelze prohledat, pokud dotazu nejsou vráceny žádné řádky. Například klauzule WHEN NOT MATCHED BY SOURCE THEN UPDATE SET TargetTable.Col1 = SourceTable.Col1 může způsobit selhání příkazu, pokud Col1 je ve zdrojové tabulce nepřístupná.

Uživatelská akce

Ověřte následující informace a podle potřeby opravte tvrzení.

  • Název sloupce se nachází v tabulce a je správně napsán. Následující příklad dotazuje katalogový pohled sys.columns tak, aby vrátil všechna jména sloupců pro danou tabulku.

    SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('schema_name.table_name');  
    
  • Citlivost na velikost písmen při kolaci databáze. Následující příkaz vrací střídání zadané databáze.

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

    Zkratka CS v názvu kolace znamená, že kolace je citlivá na velká písmena. Například Latin1_General_CS_AS je kolace citlivá na velká písmena a přízvuk. Upravte název sloupce tak, aby odpovídal případu názvu sloupce, jak je definován v tabulce.

  • Sloupcový alias je nesprávně uveden. Upravte tvrzení opakováním výrazu, který alias definuje, v příslušné klauzuli nebo použitím odvozené tabulky. Následující příklad opakuje výrazy, které definují Year alias v klauzuli GROUP BY.

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

    Následující příklad používá odvozenou tabulku k tomu, aby byl název aliasu dostupný dalším klauzulím v dotazu. Všimněte si, že alias Year je definován v klauzuli FROM, která je zpracována jako první, a tak alias je dostupný pro použití v dalších klauzulích dotazu.

    USE AdventureWorks2022;  
    GO  
    SELECT d.Year, SUM(TotalDue) AS Total  
    FROM (SELECT DATEPART(yyyy,OrderDate) AS Year, TotalDue  
          FROM Sales.SalesOrderHeader)AS d  
    GROUP BY Year;  
    
  • Klauzule WHEN NOT MATCHED BY SOURCE ve výroku MERGE označuje hodnotu, ke které lze přistupovat. Upravte MERGE příkaz tak, aby alespoň jeden řádek byl vrácen zdrojovou tabulkou v klauzuli WHEN NOT MATCHED BY SOURCE. Například možná budete muset přidat nebo upravit podmínku vyhledávání specifikovanou pro danou klauzuli. Alternativně můžete klauzuli upravit tak, aby určila hodnotu, která neodkazuje na zdrojovou tabulku. Například: WHEN NOT MATCHED BY SOURCE THEN UPDATE SET TargetTable.Col1 = <expression, or other available value>.