Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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
Yearv 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í:
FROM
Zapnuto
JOIN
WHERE
SESKUPIT PODLE
S CUBE nebo s ROLLUPEM
HAVING
SELECT
UNIKÁTNÍ
ŘADIT PODLE
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.Col1může způsobit selhání příkazu, pokudCol1je 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í
Yearalias 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
Yearje 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>.
Související obsah
- MERGE (Transact-SQL)
- Klauzule FROM plus JOIN, APPLY, PIVOT (Transact-SQL)
- SELECT (Transact-SQL)
- UPDATE (Transact-SQL)