Sql error 209

i'm getting following exception when i try to execute stored procedure.
  • Remove From My Forums
  • Question

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

    {«Ambiguous column name ‘MemberID’.rnTransaction 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

Answers

  • The procedure stops immediately after an error like this.  In fact, 2005’s try..catch will not even stop it.  It is pretty rare, and I am guessing that you modified one of the objects after creating the procedure:

    create table testCrash
    (
        testCrashId int,
        value       varchar(10)
    )
    create table testCrash2
    (
        testCrash2Id int
    )
    go
    create procedure testCrash$test
    as
     begin tran

     select value
     from   testCrash
                cross join testCrash2

     rollback tran
    go
    exec testCrash$test
    go
    alter table testCrash2
      add value varchar(10)
    go
    exec testCrash$test
    go
    Msg 209, Level 16, State 1, Procedure testCrash$test, Line 4
    Ambiguous column name ‘value’.
    Msg 266, Level 16, State 2, Procedure testCrash$test, Line 4
    Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 0, current count = 1.
    go

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

Страницы 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,183

Re: Ошибка SQL

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

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

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

Re: Ошибка SQL

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

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

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

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

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

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,183

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,183

Re: Ошибка SQL

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

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

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

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

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

Re: Ошибка SQL

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

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

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

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

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

Re: Ошибка SQL

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

Страницы 1

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

  1. Issue
  1. Anton van der Post

    Anton van der Post

  2. PowerBuilder
  3. Tuesday, 27 March 2018 16:38 PM UTC

Running in following error MicroSoft SQLServer 2008 R2:

DataBase Error: (209=SQLSTATE = 42000 Microsoft SQL Server Native Client 10.0 Ambiguous column name ‘OrderKey’

— checked all datastores and datawindows for duplication of column OrderKey

— checked related stored stored procedures for duplication of column OrderKey in final result set
(NO COUNT ON)

The same code runs fine when using a copy of the database in SQL2000 Compatible Mode.

Any pointers are appreciated

Thanks,
Anton

  1. Error

  1. Thursday, 29 March 2018 14:47 PM UTC
  2. PowerBuilder
  3. # 1

All — thanks for your replies.

Using the suggestions I was able to pinpoint the «non-compliant» stored procedure.

To test the problem:
I took the SQL Server2000 stored procedure and loaded that in SQL Server 2008 R2 native database mode and there was the error:

Msg 209, Level 16, State 1, Procedure nspCartonization, Line 1154 Ambiguous column name OrderKey
Msg 209, Level 16, State 1, Procedure nspCartonization, Line 1154 Ambiguous column name CartonGroup

SQL SERVER 2008 NATIVE MODE — NO LONGER ALLOWED syntax:
SELECT OrderKey, CartonGroup, * FROM TABLE ==>> This has duplicated column names and execution / compile of the procedure fails.

Problem solved with:
SELECT OrderKey, CartonGroup FROM TABLE or SELECT * FROM TABLE

The application Runtime has no longer this error.

Best Regards,
Anton

  1. Wednesday, 28 March 2018 04:30 AM UTC
  2. PowerBuilder
  3. # 2

I have seen that error when using a column name in the ORDER BY clause even where there is no other column possible. 

Work around is to order the relative column number of the columns.  for example ….ORDER BY 2 , 1 desc 

  1. Tuesday, 27 March 2018 21:04 PM UTC
  2. PowerBuilder
  3. # 3

It is possible that the 2008 server has tighter rules than that of the 2000 server.

Try pre-pending the table name to the columns names and see if that helps.

Sometimes using an alias instead of the actual table name is easier to do.

Example:

SELECT  column1  FROM  table1;

becomes

SELECT  T1.column1 FROM  table 1  T1;

Olan

  • Page :
  • 1

There are no replies made for this question yet.
However, you are not allowed to reply to this question.

Please login to post a reply

You will need to be logged in to be able to post a reply. Login using the form on the right or register an account if you are new here. Register Here »

Forgot Password?

Понравилась статья? Поделить с друзьями:
  • Sql error 42p01 error invalid reference to from clause entry for table
  • Sql 2008 install error
  • Sql 2005 error
  • Sql 2003 error
  • Sql error 42883 error could not identify an equality operator for type json