- 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 DATETIMEAS
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 rollbackDROP TABLE #TEMPRESULT
IF @@ERROR<>0
GOTO ERR_HANDLERCOMMIT TRANSACTION
RETURN 0
ENDERR_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 transelect value
from testCrash
cross join testCrash2rollback 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>‘. |
||
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 : | ||
|
Страницы 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 <= @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
Чтобы отправить ответ, вы должны войти или зарегистрироваться
- Issue
-
Anton van der Post
- PowerBuilder
- 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
- Error
- Thursday, 29 March 2018 14:47 PM UTC
- PowerBuilder
-
# 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
- Wednesday, 28 March 2018 04:30 AM UTC
- PowerBuilder
-
# 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
- Tuesday, 27 March 2018 21:04 PM UTC
- PowerBuilder
-
# 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?