Sql ошибка 209

Home > SQL Server Error Messages > Msg 209 — Ambiguous column name ‘<Column Name>‘.

SQL Server Error Messages — Msg 209 — Ambiguous column name ‘<Column Name>‘.

SQL Server Error Messages — Msg 209

Error Message

Server: Msg 209, Level 16, State 1, Line 1
Ambiguous column name '<Column Name>'.

Causes:

This error happens when you are joining 2 or more tables in a statement and there are columns among these tables that have the same name and you didn’t prefix the column name with the table name when referencing the column in your statement.

To illustrate, let’s say you have the following tables which contains the Employees and Supervisors of your company:

CREATE TABLE [dbo].[Supervisors] (
    [SupervisorID]      INT,
    [FirstName]         VARCHAR(50),
    [LastName]          VARCHAR(50)
)
CREATE TABLE [dbo].[Employees] (
    [EmployeeID]        INT,
    [FirstName]         VARCHAR(50),
    [LastName]          VARCHAR(50),
    [SupervisorID]      INT
)

You want to generate a list of your employees together with the name of their corresponding supervisors. In doing so, you issued the following SELECT statement:

SELECT [FirstName] AS [EmployeeFirstName],
       [LastName]  AS [EmployeeLastName], 
       [FirstName] AS [SupervisorFirstName],
       [LastName]  AS [SupervisorLastName]
FROM [dbo].[Employees] Emp INNER JOIN [dbo].[Supervisors] Sup
ON Emp.[SupervisorID] = Sup.[SupervisorID]

Issuing this SELECT statement in Query Analyzer will generate the following errors:

Server: Msg 209, Level 16, State 1, Line 1
Ambiguous column name 'FirstName'.
Server: Msg 209, Level 16, State 1, Line 1
Ambiguous column name 'LastName'.
Server: Msg 209, Level 16, State 1, Line 1
Ambiguous column name 'FirstName'.
Server: Msg 209, Level 16, State 1, Line 1
Ambiguous column name 'LastName'.

Solution / Work Around:

To avoid this error, make sure that you prefix the column name with the table name or table alias for those columns that exist in more than 1 table. Here’s an updated SELECT statement that will not generate the error:

SELECT Emp.[FirstName] AS [EmployeeFirstName],
       Emp.[LastName]  AS [EmployeeLastName], 
       Sup.[FirstName] AS [SupervisorFirstName],
       Sup.[LastName]  AS [SupervisorLastName]
FROM [dbo].[Employees] Emp INNER JOIN [dbo].[Supervisors] Sup
ON Emp.[SupervisorID] = Sup.[SupervisorID]

It is a good practice to always prefix column names with the table name or table alias so that in case additional columns are added to a table that have the same name as existing columns in another table, you won’t encounter this error.

Related Articles :
  • Frequently Asked Questions — SQL Server Error Messages
  • Frequently Asked Questions — INSERT Statement
  • Frequently Asked Questions — SELECT Statement

User-209105085 posted

i’m getting following exception when i try to execute stored procedure.

{«Ambiguous column name ‘MemberID’.\r\nTransaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 0, current count = 1.» }

I know why i’m getting «Ambiguous column name ‘MemberID'» exception but i dont know why i’m getting
«Transaction count after EXECUTE indicates that……»

In my stored proc i’m checking if error occured goto :Error_handler where i do ROLLBACK TRAN

/* Its failing at    MemberID = tTempResult.MemberID   bcoz of Ambiguous column name. I know i have to use RebateInstanceItem.MemberID=tTempResult.MemberID    */   

here is my stored proc

CREATE PROCEDURE dbo.ExportFile
   @intMonth INT,
   @intYear INT,
   @dtFirstDayOfMonth DATETIME

AS 

BEGIN

BEGIN TRANSACTION

  /*
   I have some logic here that will select rows into temporary table
   #TEMPRESULT
  */

 
   UPDATE
   dbo.RebateInstanceItem
  SET  
   ResubmitCreated = @dtmNewCreated
  FROM #TEMPRESULT tTempResult
  WHERE 
   MemberID = tTempResult.MemberID   
    AND RebateInstanceItem.IsResubmit = ‘Y’
    AND (RebateInstanceItem.ResubmitCreated = @dtmLastCreated
   OR RebateInstanceItem.ResubmitCreated IS NULL)    

  IF @@ERROR<>0
    GOTO ERR_HANDLER // when error it will goto error_handler that will rollback

  DROP TABLE #TEMPRESULT
  IF @@ERROR<>0
   GOTO ERR_HANDLER

COMMIT TRANSACTION
RETURN 0
END

ERR_HANDLER:
 ROLLBACK TRANSACTION
 RETURN 1
GO

Ошибка 209 SQL — что это и как её исправить?

Если вы начали заниматься программированием, то скорее всего столкнулись с ошибкой 209 SQL. Это сообщение об ошибке, которое вы можете получить, когда пытаетесь выполнить запрос к базе данных. Это может быть достаточно разочаровывающим, особенно если вы только начали изучать SQL и не знаете, как её исправить. В этой статье мы рассмотрим, что такое ошибка 209 SQL и как её исправить.

Что такое ошибка 209 SQL?

Ошибка 209 SQL обычно возникает, когда вы пытаетесь выполнить запрос к базе данных, но запрос не может быть выполнен, потому что таблица, которая должна быть обращена, не существует. Это может произойти, если вы попытаетесь обратиться к таблице, которая была удалена, а также если вы ошибочно указали неправильное имя таблицы в запросе. Ошибка 209 SQL может также произойти из-за случайного удаления какой-нибудь таблицы, к которой вы пытаетесь обратиться, или если таблица временно недоступна.

Как исправить ошибку 209 SQL?

Существует несколько способов исправить эту ошибку. Вот некоторые из них.

1. Проверьте правильность имени таблицы в запросе

Возможно, в запросе, который вы пытаетесь выполнить, указано неправильное имя таблицы. Проверьте, чтобы имя таблицы было правильным и соответствовало тому, что вы используете в базе данных. Убедитесь, что вы не ошиблись в написании имени таблицы, включая регистр символов.

2. Проверьте существование таблицы в базе данных

Если имя таблицы в запросе верно, то возможно, что таблицы в базе данных нет и запрос невозможно выполнить. Проверьте, существует ли таблица в базе данных. Вы можете использовать команду SHOW TABLES, чтобы убедиться, что таблица находится в базе данных и вы правильно указываете её имя.

3. Проверьте пользователя и его права доступа к таблицам

Некоторые SQL-запросы могут быть выполнены только определёнными пользователями с нужными правами. Возможно, что пользователя, который пытается выполнить запрос, нет в списке допущенных к таблице или у него недостаточно прав, чтобы выполнить такой запрос. Проверьте права пользователей к таблицам базы данных и убедитесь, что у вас есть правильные права для того, чтобы выполнить запрос.

4. Проверьте правильность синтаксиса запроса

Ошибки синтаксиса могут вызвать ошибку 209 SQL. Проверьте, чтобы ваш запрос соответствовал синтаксическому правилу языка SQL. Если запрос содержит ошибки, исправьте их и попробуйте выполнить запрос снова.

5. Проверьте состояние базы данных

Ошибки 209 SQL могут также возникнуть из-за состояния базы данных. Если, например, база данных повреждена, то массивы данных могут потерять связь. В таких случаях, часто помогает перезагрузка базы данных.

Резюме

Ошибка 209 SQL — это не такая уж и сложная проблема, если вы знаете, что искать. Прежде всего, вы должны проверить правильность имени таблицы в запросе и убедиться, что она существует в базе данных. Затем проверьте права пользователя, которые вы используете для доступа к таблице, и убедитесь, что у него есть право выполнить запрос. Если всё это верно, то следующим шагом будет проверить синтаксис запроса и состояние базы данных, если проблема не совсем понятна. В любом случае, ошибку 209 SQL можно легко исправить, если знать, как её искать и каким способом её устранять.

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

#1 5 августа 2008 12:22:00

  • Олег
  • Участник
  • Неактивен
  • На форуме с 17 ноября 2003
  • Сообщений: 57

Re: Ошибка SQL

При работе с расчетным документом, решил отсортировать по дате измен.

Сообщение 209, уровень 16, состояние 1, строка 1
Ambiguous column name ‘CHANGE_DATE’.

exec sp_executesql N’SELECT DISTINCT
BLC_DOCS.BLC_DOCS_ID,
BLC_DOCS.BLC_DOCS_NUMBER,
BLC_DOCS.BLC_DOCS_DATE,
BLC_DOCS.BLC_DOCS_COMMENT,
BLC_DOCS.BLC_DOCS_NAME,
BLC_DOCS.BLC_DOC_KIND_ID,
BLC_DOCS.BLC_DOCS_STATE,
BLC_DOCS.CEHA_ID AS DOC_CEHA_ID,
BLC_DOCS.BLC_DOCS_SUM,
BLC_DOCS.BLC_DOCS_SUM_U,
BLC_DOCS.BLC_DOC_PREF,
BLC_DOCS.BLC_DOC_YEAR,
BLC_DOCS.BLC_DOC_PREFCNT,
BLC_DOCS.CONTRAGENT_ID,
BLC_DOCS.CREATOR,
BLC_DOCS.CREATE_DATE,
BLC_DOCS.CHANGER,
BLC_DOCS.CHANGE_DATE,
BLC_DOCS.N_ORD_ID,
BLC_DOCS_S.SUM_F,
BLC_DOCS_S.SUM_F_A,
BLC_DOCS_S.SUM_T,
BLC_DOCS_S.SUM_T_A,
BLC_DOC_KIND.BLC_DOC_KIND_NAME,
BLC_DOC_KIND.BLC_CONTRAGENT_NEEDED,
CEHA.CEHA_ID,
CEHA.CEHA_NUMBER,
CEHA.CEHA_SECTOR,
CEHA.CEHA_NAME,
CONTRAGENT.CONTRAGENT_INN,
CONTRAGENT.CONTRAGENT_NAME,
USER_CREATOR.USER_NAME AS USER_CREATOR,
USER_CHANGER.USER_NAME AS USER_CHANGER,
(0) AS TEMP_DOC_PAR_ID,
N_ORDS.N_ORD_NOTE,
N_ORDS.N_ORD_NAME,
N_ords.COMMONTREE_ID,
COMMONTREE.COMMONTREE_NAME,
N_ORDS.N_ORDSSTART,
N_ORDS.N_ORDEND,
N_ORDS.N_ORDREM,
N_ORDS.N_ORDST_ID,
NORDERS.NORDER_NAME
FROM BLC_DOCS_CEHA
LEFT JOIN BLC_DOCS ON (BLC_DOCS.BLC_DOCS_ID = BLC_DOCS_CEHA.BLC_DOCS_ID)
LEFT JOIN BLC_DOC_KIND ON (BLC_DOC_KIND.BLC_DOC_KIND_ID = BLC_DOCS.BLC_DOC_KIND_ID)
LEFT JOIN BLC_DOCS_S ON (BLC_DOCS_S.BLC_DOCS_ID = BLC_DOCS.BLC_DOCS_ID)
LEFT JOIN CONTRAGENT ON (CONTRAGENT.CONTRAGENT_ID = BLC_DOCS.CONTRAGENT_ID)
LEFT JOIN USERS USER_CREATOR ON (USER_CREATOR.USER_ID = BLC_DOCS.CREATOR)
LEFT JOIN USERS USER_CHANGER ON (USER_CHANGER.USER_ID = BLC_DOCS.CHANGER)
LEFT JOIN CEHA ON (CEHA.CEHA_ID = BLC_DOCS.CEHA_ID)
LEFT JOIN N_ORDS ON (N_ORDS.N_ORD_ID = BLC_DOCS.N_ORD_ID)
LEFT JOIN COMMONTREE Commontree ON  (N_ords.COMMONTREE_ID = Commontree.COMMONTREE_ID)
LEFT JOIN NORDER_N_ORDS ON NORDER_N_ORDS.N_ORD_ID=N_ORDS.N_ORD_ID
LEFT JOIN NORDERS ON NORDERS.NORDER_ID=NORDER_N_ORDS.NORDER_ID WHERE (BLC_DOCS.BLC_DOCS_DATE >= @P1 AND BLC_DOCS.BLC_DOCS_DATE &lt;= @P2) AND
(BLC_DOCS_CEHA.CEHA_ID  IN (216,215))
ORDER BY CHANGE_DATE ASC’, N’@P1 datetime,@P2 datetime’, ‘26.11.1999 12:00:00:000AM’, ‘26.11.1999 12:00:00:000AM’

#2 Ответ от Сергей Девятериков 6 августа 2008 16:06:00

  • Сергей Девятериков
  • Участник
  • Неактивен
  • На форуме с 1 октября 2003
  • Сообщений: 501

Re: Ошибка SQL

А в чем проблема то?

Ambiguous column name ‘CHANGE_DATE’

это означает, что Ваш запрос содержит две или более таких колонок

#3 Ответ от Олег 18 августа 2008 10:26:00

  • Олег
  • Участник
  • Неактивен
  • На форуме с 17 ноября 2003
  • Сообщений: 57

Re: Ошибка SQL

Сергей Девятериков писал(а):
А в чем проблема то?

Ambiguous column name ‘CHANGE_DATE’

это означает, что Ваш запрос содержит две или более таких колонок

Проблема в ПО, запрос то не мой, а ваш.

#4 Ответ от Владимир Белов 18 августа 2008 10:50:00

  • Владимир Белов
  • Участник
  • Неактивен
  • На форуме с 2 декабря 2005
  • Сообщений: 62

Re: Ошибка SQL

Олег писал(а):
При работе с расчетным документом, решил отсортировать по дате измен.

Сообщение 209, уровень 16, состояние 1, строка 1
Ambiguous column name ‘CHANGE_DATE’.

Спасибо за сообщение, ошибку исправим.

#5 Ответ от Олег 9 сентября 2010 11:08:32

  • Олег
  • Участник
  • Неактивен
  • На форуме с 26 января 2009
  • Сообщений: 88

Re: Ошибка SQL

Владимир Белов пишет:

Олег писал(а):
При работе с расчетным документом, решил отсортировать по дате измен.

Сообщение 209, уровень 16, состояние 1, строка 1
Ambiguous column name ‘CHANGE_DATE’.

Спасибо за сообщение, ошибку исправим.

Такая же ошибка при работе с учетными документами v5.7

#6 Ответ от Олег Зырянов 9 сентября 2010 11:15:07

  • Олег Зырянов
  • Технический руководитель
  • Неактивен
  • Откуда: Новосибирск
  • На форуме с 10 декабря 2008
  • Сообщений: 4,246

Re: Ошибка SQL

Есть еще локальная сортировка.   Можно ей воспользоваться если требуется сильно функция, она должна сработать.

#7 Ответ от Олег 9 сентября 2010 11:47:09

  • Олег
  • Участник
  • Неактивен
  • На форуме с 26 января 2009
  • Сообщений: 88

Re: Ошибка SQL

Олег Зырянов пишет:

Есть еще локальная сортировка.   Можно ей воспользоваться если требуется сильно функция, она должна сработать.

Да работает. А как на счет исправить?

#8 Ответ от Олег Зырянов 9 сентября 2010 12:03:02

  • Олег Зырянов
  • Технический руководитель
  • Неактивен
  • Откуда: Новосибирск
  • На форуме с 10 декабря 2008
  • Сообщений: 4,246

Re: Ошибка SQL

ну постараемся конечно.

#9 Ответ от Дмитрий Гамий 12 октября 2010 15:35:33

  • Дмитрий Гамий
  • Дмитрий Гамий
  • Техподдержка
  • Неактивен
  • Откуда: г.Днипро, CSoft Украина
  • На форуме с 10 декабря 2008
  • Сообщений: 748

Re: Ошибка SQL

Такая же ошибка возникает в TechnologiCS 6.0.1(13162) при попытке установить фильтр по полю «Дата изменения» в режимах «Расчётные документы» и «Учётные документы».

#10 Ответ от Олег Зырянов 6 декабря 2010 09:31:26

  • Олег Зырянов
  • Технический руководитель
  • Неактивен
  • Откуда: Новосибирск
  • На форуме с 10 декабря 2008
  • Сообщений: 4,246

Re: Ошибка SQL

Сервис пак на 5.7, 6.0.1 . в техподдержке.

#11 Ответ от Олег 11 марта 2011 09:02:23

  • Олег
  • Участник
  • Неактивен
  • На форуме с 26 января 2009
  • Сообщений: 88

Re: Ошибка SQL

Добрый день!

TCS 5.7 SQL 2008
Режим ввода номенклатуры в ТП.
Присоединяю параметры номенклатуры fx. Жму <нет>. И получаю сообщение от SQL
SQL Server Error: Элементы ORDER BY должны входить в список выбора, если указывается SELECT DISTINCT

Теперь входу Вид и включаю локальную сортировку. Делаю тоже самое с номенклатурой и все работает.

Можно ли исправить данную ошибку не включая локальную сортировку?

И как при локальной сортировке добиться сортировку по убыванию?

Спасибо.

#12 Ответ от Олег Зырянов 11 марта 2011 09:50:24

  • Олег Зырянов
  • Технический руководитель
  • Неактивен
  • Откуда: Новосибирск
  • На форуме с 10 декабря 2008
  • Сообщений: 4,246

Re: Ошибка SQL

при локальной сортировке добиться сортировку по убыванию

Никак, локальная только в одну сторону работает.

Про ошибку посмотрим конечно, но все ситуации просто предусмотреть сложно. Работаем конечно над этим, в будущих релизах добьемся еще большей стабильности.

#13 Ответ от Олег 11 марта 2011 10:40:44

  • Олег
  • Участник
  • Неактивен
  • На форуме с 26 января 2009
  • Сообщений: 88

Re: Ошибка SQL

На счет локальной сортировки жаль.

Вот еще, нельзя ли реализовать в выборках выполнения условия:

«Не содержит» показывало бы и позиции с Null значением.

#14 Ответ от Олег Зырянов 11 марта 2011 10:51:17

  • Олег Зырянов
  • Технический руководитель
  • Неактивен
  • Откуда: Новосибирск
  • На форуме с 10 декабря 2008
  • Сообщений: 4,246

Re: Ошибка SQL

:) Сложно сказать. Но правильней конечно сделать реализацию OR. В построителе запросов у нас фильтр погибче, но правда и настроить его сложнее.

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

I can’t seem to solve the error no matter what I do.

Msg 209, Level 16, State 1, Line 498
Ambiguous column name ‘SupplyCode’.

—h. Select the supply code and description of the supplies that have never been used on a job.(2 marks)

select SupplyCode,Description, count(*) from JobSupply

inner join Supply
on Supply.SupplyCode = JobSupply.SupplyCode

group by Supply.SupplyCode

Msg 8120, Level 16, State 1, Line 498
Column ‘Supply.Description’ is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

This is what i had orignallay done
select Supply.SupplyCode,Description,count(jobNumber) from Supply

inner join JobSupply
on Supply.SupplyCode = JobSupply.SupplyCode

group by Supply.SupplyCode

having Count(JobNumber) = 0

Понравилась статья? Поделить с друзьями:
  • Sql ошибка 2003
  • Sqlyog ошибка 2058
  • Sql ошибка 1950
  • Squad ошибка видеопамяти
  • Squad ошибка 33м