1c ошибка odbc sqlstate 42s22 номер ошибки 207 недопустимое имя столбца chargemenuitem
Do you know how I can resolve the error in the stored procedure that follows:
Microsoft SQL DMO (ODBC SQLSTATE 42S22) Error 207
Invalid column name 'CustomerNumber'
Invalid column name 'OfficeNumber'
I am able to narrow the error down to the following ON statement:
ON C.CustomerNumber = P.CustomerNumber AND
C.OfficeNumber = P.OfficeNumber
CREATE PROCEDURE procDetailBranches
@Branch nvarchar (4)
As
Declare @FromDateA datetime,
@ToDateA datetime,
@FromDateB datetime,
@ToDateB datetime,
@tempdate datetime
-- get our base datetime.. for use throughout procedure. avoids problems when running
-- close to midnight.
Set @tempdate=getdate()
Set @ToDateA = CAST(CONVERT(char(8), @tempdate, 112) As datetime) - DAY(@tempdate) + 1
Set @FromDateA = DATEADD(Month, - 5, @ToDateA)
Set @ToDateB = DateAdd(Month, -6,CAST(CONVERT(char(8), @tempdate, 112) As datetime) - DAY(@tempdate) + 1)
Set @FromDateB = DATEADD(Month, -5, @ToDateB)
Select Case gDateRange
When 0 then DateRange
Else ' '
End as DateRange
,Case gCustomerNumber
When 0 then BCH_Customer
Else Space(10)
End as [BCH_CustomerNumber]
,Case gAcctValue
When 0 then Right(space(13) + Convert(varchar(13),[Acct Value]),13)
Else Space(13)
End as [Acct Value]
,Case gAcctValue
When 0 then Right(Space(10) + Convert(varchar(10),NumofV alues),10)
Else space(10)
End as NumofValues
,Case When gdateRange=0 and gCustomerNumber=0 and gAcctValue=0 Then Space(13)
Else Right(space(13) + Convert(varchar(13),TotAcc tValue),13 )
End As TotalAcctValue
From (
SELECT Top 100 Percent
DateRange
,C.BCH_Customer
,[Acct Value]
,Count(*) As NumofValues
,Sum([Acct Value]) As TotAcctValue
,Grouping([Acct Value]) as gAcctValue
,Grouping(C.BCH_Customer) as gCustomerNumber
,Grouping(DateRange) as gDateRange
FROM (Select y.*
,CASE WHEN LostDate BETWEEN @FromDateA AND @ToDateA THEN 'LESS THAN 06 MONTHS OLD'
WHEN LostDate BETWEEN @FromDateB AND @ToDateB THEN '06 MONTHS TO 12 MONTHS OLD'
END AS DateRange
FROM(Select x.*
,CAST(CONVERT(char(8), x.DateLost, 112) As DATETIME) As LostDate
,Convert(char(5), OfficeNumber) + Convert(char(10), CustomerNumber) As BCH_Customer
FROM tblCustomers As x
WHERE OfficeNumber = @Branch
) As y
WHERE LostDate BETWEEN @FromDateA AND @ToDateA
OR LostDate BETWEEN @FromDateB AND @ToDateB
) As C
INNER JOIN (Select Convert(char(5), OfficeNumber) + Convert(char(10),CustomerN umber) As BCH_Customer
,CASE WHEN MarketValue < 0.01 THEN CashBalance
ELSE MarketValue
END AS [Acct Value]
FROM tblProducts
WHERE OfficeNumber = @Branch
) As P
ON C.CustomerNumber = P.CustomerNumber AND
C.OfficeNumber = P.OfficeNumber
GROUP BY
DateRange
,C.BCH_Customer
,[Acct Value]
WITH ROLLUP
ORDER BY DateRange,C.BCH_Customer,[ Acct Value] DESC
) As Z
GO
Возможны следующие причины возникновения этой ошибки запроса.
Имя столбца неправильно указано, либо столбец не существует ни в одной указанной таблице.
Параметры сортировки базы данных учитывают регистр, а регистр имени столбца, указанный в запросе, не совпадает с регистром столбца, определенного в таблице. Например, если столбец определен в таблице как LastName, а для базы данных используются параметры сортировки с учетом регистра, при выполнении запросов, в которых для этого столбца указано имя Lastname или lastname, возникнет ошибка 207, так как имена столбцов не совпадают.
Псевдоним столбца, определенный в предложении SELECT, упоминается в другом предложении, например WHERE или GROUP BY. Например, следующий запрос определяет псевдоним столбца Year в предложении SELECT и упоминает его в предложении GROUP BY.
Порядок логической обработки предложений запросов вызывает возвращение ошибки 207. Далее приводится порядок обработки.
WITH CUBE или WITH ROLLUP
Поскольку псевдоним столбца не определяется до обработки предложения SELECT, псевдоним неизвестен при обработке предложения GROUP BY.
Инструкция MERGE выдает эту ошибку, когда исходная таблица в предложении WHEN NOT MATCHED BY SOURCE не возвращает строк, а предложение ссылается на столбцы в исходной таблице. Данная ошибка возникает из-за того, что невозможно обратиться к столбцам в исходной таблице, если запрос не возвратил строк. Например, предложение WHEN NOT MATCHED BY SOURCE THEN UPDATE SET TargetTable.Col1 = SourceTable.Col1 может стать причиной ошибки инструкции из-за недоступности столбца Col1 в исходной таблице.
User Action
Verify the following information and correct the statement as appropriate.
The column name exists in the table and is spelled correctly. The following example queries the sys.columns catalog view to return all column names for a given table.
The case sensitivity of the database collation. The following statement returns the collation of the specified database.
The abbreviation CS in the collation name indicates the collation is case-sensitive. For example, Latin1_General_CS_AS is a case-sensitive and accent-sensitive collation. Modify the column name to match the case of the column name as it is defined in the table.
A column alias is referenced incorrectly. Modify the statement by repeating the expression that defines the alias in the appropriate clause or by using a derived table. The following example repeats the expressions that define the Year alias in the GROUP BY clause.
The following example uses a derived table to make the alias name available to other clauses in the query. Notice that the alias Year is defined in the FROM clause, which is processed first, and so makes the alias available for use in other clauses in the query.
The WHEN NOT MATCHED BY SOURCE clause in the MERGE statement refers to a value that can be accessed. Modify the MERGE statement so that at least one row is returned by the source table in the WHEN NOT MATCHED BY SOURCE clause. For example, you might need to add or revise the search condition specified for the clause. Alternatively, you can modify the clause to specify a value that does not reference the source table. For example, WHEN NOT MATCHED BY SOURCE THEN UPDATE SET TargetTable.Col1 = .
Поиск ссылок стандартным методом довольно долгая процедура.
В этой обработке реализован обход метаданных для поиска реквизитов, которые могут содержать ссылку на искомый объект, составление и выполнение запросов по найденным таблицам.
Для работы необходима компонента 1С++.
(1), (2). Прошу прощения не отвязал от конфгурации.
(3) - Максимально количество субконто не определялось, стояло 4 по умолчанию.
Добавил недостающую процедуру вывода таблицы значений - удобно, если не хочется делать печатную формую
Поправил определение количества субконто.
Ошибка обработки запроса:
SELECT DISTINCT
:Объект As [Объект $Справочник.Контрагенты]
,Tab.DOCID As [Ссылка $Документ]
,'Субконто' As Реквизит
,'Проводка' As Метаданные
,J.IDDOCDEF AS Ссылка_вид
, CASE :Объект
When
Tab.DTSC0 then 'Дт1'
When
Tab.KTSC0 then 'Кт1'
When
Tab.DTSC1 then 'Дт1'
When
Tab.KTSC1 then 'Кт1'
When
Tab.DTSC2 then 'Дт2'
When
Tab.KTSC2 then 'Кт2'
When
Tab.DTSC3 then 'Дт3'
When
Tab.KTSC3 then 'Кт3'
END As Субконто
FROM
_1SENTRY As Tab
INNER JOIN _1sjourn J On J.IDDOC = Tab.DOCID
where (Tab.DTSC0 = :Объект And Tab.VDTSC0 in (450)) OR (Tab.KTSC0 = :Объект And Tab.VKTSC0 in (450))
OR (Tab.DTSC1 = :Объект And Tab.VDTSC1 in (450)) OR (Tab.KTSC1 = :Объект And Tab.VKTSC1 in (450))
OR (Tab.DTSC2 = :Объект And Tab.VDTSC2 in (450)) OR (Tab.KTSC2 = :Объект And Tab.VKTSC2 in (450))
OR (Tab.DTSC3 = :Объект And Tab.VDTSC3 in (450)) OR (Tab.KTSC3 = :Объект And Tab.VKTSC3 in (450))
State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'DTSC3'.
В процедуре НайтиРеквизитыСсылок в цикле по субконто, нужно делать цикл от 1 по КолвоСубконто-1
и в ДопКолонке писать
When
Tab.DTSC"+Субконто+" then 'Дт"+(Субконто+1)+"'
When
Tab.KTSC"+Субконто+" then 'Кт"+(Субконто+1)+"'";
(10) В принципе то же самое, только у меня первые субконто задаются до цикла по остальным, тогда цикл с 1.
Добавил определение наличия таблицы, поправил максимально количество субконто, (6)поправил нумерацию субконто.
(8) Ссылка_вид содержит идентификатор вида документа для типизации документа в запросе. Если идет запрос по регистрам - в качестве сылки возвращается документ, который делал движения. В остальных случаях если ссылка не документ, то и вид документа не нужен, соответственно он пустой.
Это служебное поле, которое в принципе можно прятать.
А что в колонке Ссылка_вид?
Если ссылка найдена в движении регистра, то там какое-то число, в остальных строках там пусто.
1. Еще бы надо проверять наличие таблицы _1sentry и, в зависимости от ее наличия, обрабатывать или пропускать строки 317-340. В ТиС и ЗиК ее нет и получаем ошибку.
2. В _1sentry нумерация субконто начинается с ноля, т.е. при 3-х субконто поля будут называться DTSC0, DTSC1, DTSC2. А в обработке они начинаются с единицы, в связи с чем имеем ошибку - Недопустимое имя столбца "DTSC3". Соответственно, строку 330 надо изменить на
С проверкой на ведение бух. учета в базе вообще - согласен.
По поводу цикла от 0 по КолвоСубконто-1:
там перед циклом определяются DTSC0 и KTSC0. Отдельно. (и условия для них).
Ошибка обработки запроса:
SELECT DISTINCT
:Объект As [Объект $Справочник.Фирмы]
,Tab.ID As [Ссылка $Справочник.Фирмы]
,'Родитель' As Реквизит
,'Справочник.Фирмы' As Метаданные
FROM
$Справочник.Фирмы As Tab
where Tab.PARENTID = :Объект
State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'PARENTID'.
--------------------------
Ошибка обработки запроса:
SELECT DISTINCT
:Объект As [Объект $Справочник.Фирмы]
,Tab.DOCID As [Ссылка $Документ]
,'Субконто' As Реквизит
,'Проводка' As Метаданные
,J.IDDOCDEF AS Ссылка_вид
, CASE :Объект
When
Tab.DTSC0 then 'Дт1'
When
Tab.KTSC0 then 'Кт1'
When
Tab.DTSC1 then 'Дт2'
When
Tab.KTSC1 then 'Кт2'
When
Tab.DTSC2 then 'Дт3'
When
Tab.KTSC2 then 'Кт3'
END As Субконто
FROM
_1SENTRY As Tab
INNER JOIN _1sjourn J On J.IDDOC = Tab.DOCID
where (Tab.DTSC0 = :Объект And Tab.VDTSC0 in ()) OR (Tab.KTSC0 = :Объект And Tab.VKTSC0 in ())
OR (Tab.DTSC1 = :Объект And Tab.VDTSC1 in ()) OR (Tab.KTSC1 = :Объект And Tab.VKTSC1 in ())
OR (Tab.DTSC2 = :Объект And Tab.VDTSC2 in ()) OR (Tab.KTSC2 = :Объект And Tab.VKTSC2 in ())
State 42000, native 102, message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near ')'.
Я работаю над изменением существующей хранимой процедуры SQL Server. Я добавил два новых столбца в таблицу и также изменил хранимую процедуру, чтобы выбрать эти два столбца. Хотя столбцы доступны в таблице SQL Server продолжает давать эту ошибку:
недопустимое имя столбца "INCL_GSTAMOUNT"
кто-нибудь может сказать мне, что здесь не так?
всякий раз, когда это происходит со мной, я нажимаю Ctrl + Shift + R обновления intellisense , закройте окно запроса (при необходимости сохраните), затем запустите новый сеанс, который обычно работает довольно хорошо.
также может произойти, если положить строку в двойные кавычки вместо одинарных.
Intellisense не обновляется автоматически, и вы не должны полностью полагаться на это
эта ошибка также может возникнуть в инкапсулированных SQL-операторах, например
объявить @tableName nvarchar (20) SET @tableName = 'GROC'
объявить @updtStmt nvarchar (4000)
SET @updtStmt = 'Update tbProductMaster_' +@tableName + ' SET department_str = ' + @tableName exec sp_executesql @updtStmt
только для того, чтобы обнаружить, что отсутствуют цитаты для инкапсуляции параметра "@tableName " далее, как следующий:
SET @updtStmt = 'Update tbProductMaster_' +@tableName + ' SET department_str = "' + @tableName+"''
я получаю ту же ошибку при создании представления.
представьте себе запрос select, который выполняется без проблем:
попытка создать представление из того же запроса приведет к ошибке:
Msg 207, Уровень 16, состояние 1, процедура foobar, строка 2
Недопустимое имя столбца "id".
для меня это оказалось проблемой области; обратите внимание, что представление создается в другой схеме. Указание схема products таблица решила проблему. То есть.. используя просто products .
с таблицей обновления или закрыть и открыть sql server эта работа
У меня была похожая проблема.
проблема заключалась в том, что в таблице был триггер, который записывал изменения в таблицу журнала аудита. В таблице журнала аудита отсутствовали столбцы.
следующая процедура помогла мне решить эту проблему, но я не знаю, почему.
даже если кажется, что тот же запрос выполняется, он не бросил эту ошибку
Я просто попробовал. Если выполнить инструкцию для создания локальной таблицы, инструмент примет, что это имя столбца существует. Просто отметьте инструкцию генерации таблицы в окне редактора и нажмите кнопку Выполнить.
Действие пользователя
Проверьте следующую информацию и исправьте инструкцию соответствующим образом.
Наличие имени столбца в таблице и правильность его указания. В следующем примере запрос к представлению каталога sys.columns возвращает все имена столбцов для этой таблицы.
Учет регистра в параметрах сортировки базы данных. Следующая инструкция возвращает параметры сортировки для указанной базы данных.
Аббревиатура CS в имени параметров сортировки означает, что учитывается регистр символов. Например, Latin1_General_CS_AS определяет параметры сортировки с учетом диакритических знаков и с учетом регистра. Измените имя столбца, чтобы оно совпадало с тем именем столбца, которое было определено в таблице, вплоть до регистра.
Неправильное упоминание псевдонима столбца. Измените инструкцию, повторив выражение, определяющее псевдоним, в соответствующем предложении или использовав производную таблицу. В следующем примере в предложении GROUP BY повторяются выражения, определяющие псевдоним Year .
В следующем примере производная таблица используется для того, чтобы сделать псевдоним доступным для других предложений в запросе. Следует заметить, что псевдоним Year определяется в предложении FROM, которое обрабатывается в первую очередь, что делает псевдоним доступным для использования в других предложениях запроса.
В предложении WHEN NOT MATCHED BY SOURCE инструкции MERGE упоминается значение к которому может осуществляться доступ. Измените инструкцию MERGE, чтобы по крайней мере одна строка была возвращена исходной таблицей в предложении WHEN NOT MATCHED BY SOURCE. Например, может потребоваться добавить или изменить условие поиска, указанное для предложения. В качестве альтернативы можно изменить предложение, чтобы указать значение, не ссылающееся на исходную таблицу. Например, WHEN NOT MATCHED BY SOURCE THEN UPDATE SET TargetTable.Col1 = .
This query error can be caused by one of the following problems.
The column name is misspelled or the column does not exist in any of the specified tables.
The collation of the database is case-sensitive and the case of the column name specified in the query does not match the case of the column defined in the table. For example, when a column is defined in a table as LastName and the database uses a case-sensitive collation, queries that refer to the column as Lastname or lastname will cause error 207 to return because the column name does not match.
A column alias, defined in the SELECT clause, is referenced in another clause such as a WHERE or GROUP BY clause. For example, the following query defines the column alias Year in the SELECT clause and refers to it in the GROUP BY clause.
Due to the order in which query clauses are logically processed, the example returns error 207. The processing order is as follows:
WITH CUBE or WITH ROLLUP
Because a column alias is not defined until the SELECT clause is processed, the alias name is unknown when the GROUP BY clause is processed.
The MERGE statement raises this error when the clause references columns in the source table but no rows are returned by the source table in the WHEN NOT MATCHED BY SOURCE clause. The error occurs because the columns in the source table cannot be accessed when no rows are returned to the query. For example, the clause WHEN NOT MATCHED BY SOURCE THEN UPDATE SET TargetTable.Col1 = SourceTable.Col1 may cause the statement to fail if Col1 in the source table is inaccessible.
Читайте также: