Ошибка odbc sqlstate 42000 номер ошибки 102

Здравствуйте. Изучаю внешние источники данных. Создал базу на SQLEXPRESS с одной таблицей и одним ключевым полем. Собственно дальше стал пробовать обратиться к базе из 1С (8.3.10). В конфигураторе добавил таблицу используя строку подключения DRIVER={SQL Server};SERVER=.SQLEXPRESS;UID=sa;PWD=12345;DATABASE=aaa;LANGUAGE=us_english. В режиме предприятия увидел свою табличку, создал несколько записей стандартными средствами. Вроде все ОК, но при редактировании или удалении записей вылезает ошибка

Ошибка внешней базы данных:

ошибка при выполнении запроса

по причине:

Ошибка ODBC. SQLSTATE: 42000

Номер ошибки: 102

Описание: [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near ‘T1’.

Откуда ноги растут не могу понять, погуглив ничего конкретного не выяснил, я так понимаю, что какая-то временная таблица T1 создается.

В моей таблице 1 поле целочисленное именуется ggg.

Может проблема в том что у меня SQLEXPRESS. Может кто еще сталкивался с такой проблемой?

General Setting

This is a weird question and I am sorry about that. I actually spent quite some time searching and analyzing our code. We have a job calling a stored procedure which selects some data and then calls other stored procedures (some which names are retrieved using the select-statements, since they might vary). It calls about 20 different of these stored procedures about 10’000 times (summed up the different calls), just varying the parameters. These stored procedures retrieve some data and then inserts the data into our databse.

Version of SQL-Server

This worked fine in Microsoft SQL-Server 2005, but since a little while we upgraded to SQL-Server 2012 (11.0.3000.0) and this problem seems to started occurring since then, or we simply were not aware of it before.

Error

So we get this error every time we execute it:

Executed as user: #DATABASEUSER_RMV_FOR_STACKOVERFLOW. Incorrect syntax near ')'. 
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'. 
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'. 
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'. 
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'. 
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'. 
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'. 
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'. 
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'. 
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'. 
[SQLSTATE 42000] (Error 102).  The step failed.

I know this is very little information, but our scripts are pretty big and I would like to ask what some of you would to to figure out the problem.

What I did so far

I looked at the scripts, did some dry runs (b/c the entire script runs for about an hour… (it’s a nightly job)). The dry runs worked fine. Also we hardly have opening brackets, and they always close. As soon as it retrieves data, after an hour of running it ‘crashes’ with this error…

So what I did:

  • Dry runs (without actually loading the data but calling most of the stored procedures) — ok, success
  • Called the main-store-procedure directly (not as job) — did not work either
  • Read through the code searched for bracket-errors — ok, no bracket errors found
  • Runned with different users: db-admin, my user — did not work either
  • Search through Google/Stackoverflow/a littlbe bit through stackexchange in general

Questions

It looks like everything the script has to do, is done correctly and completely, so we do not understand why it does not return ‘success’ and throws this error message at us.

I could imagine that there might be a field it retrieves which contains an escape character… would that make sense?

Could I set like a universal breakpoint, that the execution of the script would break as soon as this ‘error’ occurs and show me what the data is causing this error… like debugging code in visual studio?

So my main question is: Could you please give me a hint/help how to approach this error in the best way? What I should do?


Job

EXEC MY_SCHEME.dbo.MY_STOREDPROCEDURE_MAIN

MY_STOREDPROCEDURE_MAIN

SET NOCOUNT ON;

-- Insert statements for procedure here
DECLARE @userId INT
DECLARE @fullHistory BIT

SELECT @userId = userId
FROM MY_SCHEME.dbo.USERS
WHERE loginname = 'SOME_NAME'

SET @fullHistory = 0

EXECUTE MY_SCHEME.dbo.spStartMyNightlyJob @userId=@userId, @processFullHistory=@fullHistory

spStartMyNightlyJob

PROCEDURE [dbo].[spStartMyNightlyJob]
    @userId INT,
    @processFullHistory BIT
AS
BEGIN
    SET NOCOUNT ON

    DECLARE @logReport VARCHAR(255)
    SET @logReport = 'NightlyJob'

    INSERT INTO TEMP_LOGREPORT (text, report) VALUES('=======================================================================================================', @logReport)
    INSERT INTO TEMP_LOGREPORT (text, report) VALUES('NightlyJob started at ' + CAST(GETDATE() AS VARCHAR), @logReport)
    INSERT INTO TEMP_LOGREPORT (text, report) VALUES('=======================================================================================================', @logReport)

    DECLARE taskCursor CURSOR LOCAL FAST_FORWARD READ_ONLY FOR 
        SELECT
            r.taskId, link.Id, i.Description, link.externalId, rdef.name, rdir.fromDB, rdir.toDB,
            rdef.procedureName, rfs.fillStrategyId, rp.parameterId
        FROM MY_TASK r
        LEFT OUTER JOIN some_table_1 link
        ON r.LinkId = link.LinkId
        LEFT OUTER JOIN some_table_2 i
        ON link.Id = i.Id
        LEFT OUTER JOIN some_table_3_TASK_DEFINITION rdef
        ON r.taskDefinitionId = rdef.taskDefinitionId
        LEFT OUTER JOIN some_table_4_TASK_DIRECTION rdir
        ON rdef.directionId = rdir.directionId
        LEFT OUTER JOIN some_table_5_FILL_STRATEGY rfs
        ON rdef.fillStrategyId = rfs.fillStrategyId
        LEFT OUTER JOIN some_table_6_PARAMETER rp
        ON rdef.parameterId = rp.parameterId
        WHERE r.active = 1
        AND rdef.taskDefinitionId NOT LIKE 17


    DECLARE @taskId INT
    DECLARE @someOtherId INT
    DECLARE @someOtherName VARCHAR(255)
    DECLARE @externalSomeOtherId INT
    DECLARE @taskName VARCHAR(50)
    DECLARE @fromDB VARCHAR(50)
    DECLARE @toDB VARCHAR(50)
    DECLARE @storedProcedure VARCHAR(100)
    DECLARE @fillStrategyId INT
    DECLARE @parameterId INT

    OPEN taskCursor
    FETCH NEXT FROM taskCursor
    INTO
        @taskId, @someOtherId , @someOtherName , @externalSomeOtherId , @taskName, @fromDB, @toDB, @storedProcedure,
        @fillStrategyId, @parameterId

    WHILE @@FETCH_STATUS = 0 BEGIN
        INSERT INTO TEMP_LOGREPORT (text, report) VALUES('-------------------------------------------------------------------------------------------------------', @logReport)
        INSERT INTO TEMP_LOGREPORT (text, report) VALUES('Performing task: ' + @taskName, @logReport)
        INSERT INTO TEMP_LOGREPORT (text, report) VALUES('Nightly Job between: ' + @fromDB + ' -> ' + @toDB, @logReport)
        INSERT INTO TEMP_LOGREPORT (text, report) VALUES('Executive procedure: ' + @storedProcedure, @logReport)
        INSERT INTO TEMP_LOGREPORT (text, report) VALUES('Involved : ' + @someOtherName + ' (' + CAST(@someOtherId AS VARCHAR) + ')', @logReport)

        EXECUTE @storedProcedure @someOtherId , @externalSomeOtherId , @fillStrategyId, @parameterId, @userId, @processFullHistory

        INSERT INTO TEMP_LOGREPORT (text, report) VALUES('', @logReport)

        SET @taskId = NULL
        SET @someOtherId = NULL
        SET @someOtherName = NULL
        SET @externalSomeOtherId = NULL
        SET @taskName = NULL
        SET @fromDB = NULL
        SET @toDB = NULL
        SET @storedProcedure = NULL
        SET @fillStrategyId = NULL
        SET @parameterId = NULL

        FETCH NEXT FROM taskCursor
        INTO
            @taskId, @taskId , @someOtherName , @externalSomeOtherId , @taskName, @fromDB, @toDB, @storedProcedure,
            @fillStrategyId, @parameterId
    END
    CLOSE taskCursor
    DEALLOCATE taskCursor

    INSERT INTO TEMP_LOGREPORT (text, report) VALUES('=======================================================================================================', @logReport)
    INSERT INTO TEMP_LOGREPORT (text, report) VALUES('NightlyJob finished at ' + CAST(GETDATE() AS VARCHAR), @logReport)
    INSERT INTO TEMP_LOGREPORT (text, report) VALUES('=======================================================================================================', @logReport)
    RETURN 0
END

After this it opens up to about 15 different stored procedures, depending which tasks are ‘defined’ every evening..

If I comment-out the actual execution of it

EXECUTE @storedProcedure @someOtherId , @externalSomeOtherId , @fillStrategyId, @parameterId, @userId, @processFullHistory

then it completes without error.

Thanks already for looking at my question ;-)

General Setting

This is a weird question and I am sorry about that. I actually spent quite some time searching and analyzing our code. We have a job calling a stored procedure which selects some data and then calls other stored procedures (some which names are retrieved using the select-statements, since they might vary). It calls about 20 different of these stored procedures about 10’000 times (summed up the different calls), just varying the parameters. These stored procedures retrieve some data and then inserts the data into our databse.

Version of SQL-Server

This worked fine in Microsoft SQL-Server 2005, but since a little while we upgraded to SQL-Server 2012 (11.0.3000.0) and this problem seems to started occurring since then, or we simply were not aware of it before.

Error

So we get this error every time we execute it:

Executed as user: #DATABASEUSER_RMV_FOR_STACKOVERFLOW. Incorrect syntax near ')'. 
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'. 
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'. 
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'. 
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'. 
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'. 
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'. 
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'. 
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'. 
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'. 
[SQLSTATE 42000] (Error 102).  The step failed.

I know this is very little information, but our scripts are pretty big and I would like to ask what some of you would to to figure out the problem.

What I did so far

I looked at the scripts, did some dry runs (b/c the entire script runs for about an hour… (it’s a nightly job)). The dry runs worked fine. Also we hardly have opening brackets, and they always close. As soon as it retrieves data, after an hour of running it ‘crashes’ with this error…

So what I did:

  • Dry runs (without actually loading the data but calling most of the stored procedures) — ok, success
  • Called the main-store-procedure directly (not as job) — did not work either
  • Read through the code searched for bracket-errors — ok, no bracket errors found
  • Runned with different users: db-admin, my user — did not work either
  • Search through Google/Stackoverflow/a littlbe bit through stackexchange in general

Questions

It looks like everything the script has to do, is done correctly and completely, so we do not understand why it does not return ‘success’ and throws this error message at us.

I could imagine that there might be a field it retrieves which contains an escape character… would that make sense?

Could I set like a universal breakpoint, that the execution of the script would break as soon as this ‘error’ occurs and show me what the data is causing this error… like debugging code in visual studio?

So my main question is: Could you please give me a hint/help how to approach this error in the best way? What I should do?


Job

EXEC MY_SCHEME.dbo.MY_STOREDPROCEDURE_MAIN

MY_STOREDPROCEDURE_MAIN

SET NOCOUNT ON;

-- Insert statements for procedure here
DECLARE @userId INT
DECLARE @fullHistory BIT

SELECT @userId = userId
FROM MY_SCHEME.dbo.USERS
WHERE loginname = 'SOME_NAME'

SET @fullHistory = 0

EXECUTE MY_SCHEME.dbo.spStartMyNightlyJob @userId=@userId, @processFullHistory=@fullHistory

spStartMyNightlyJob

PROCEDURE [dbo].[spStartMyNightlyJob]
    @userId INT,
    @processFullHistory BIT
AS
BEGIN
    SET NOCOUNT ON

    DECLARE @logReport VARCHAR(255)
    SET @logReport = 'NightlyJob'

    INSERT INTO TEMP_LOGREPORT (text, report) VALUES('=======================================================================================================', @logReport)
    INSERT INTO TEMP_LOGREPORT (text, report) VALUES('NightlyJob started at ' + CAST(GETDATE() AS VARCHAR), @logReport)
    INSERT INTO TEMP_LOGREPORT (text, report) VALUES('=======================================================================================================', @logReport)

    DECLARE taskCursor CURSOR LOCAL FAST_FORWARD READ_ONLY FOR 
        SELECT
            r.taskId, link.Id, i.Description, link.externalId, rdef.name, rdir.fromDB, rdir.toDB,
            rdef.procedureName, rfs.fillStrategyId, rp.parameterId
        FROM MY_TASK r
        LEFT OUTER JOIN some_table_1 link
        ON r.LinkId = link.LinkId
        LEFT OUTER JOIN some_table_2 i
        ON link.Id = i.Id
        LEFT OUTER JOIN some_table_3_TASK_DEFINITION rdef
        ON r.taskDefinitionId = rdef.taskDefinitionId
        LEFT OUTER JOIN some_table_4_TASK_DIRECTION rdir
        ON rdef.directionId = rdir.directionId
        LEFT OUTER JOIN some_table_5_FILL_STRATEGY rfs
        ON rdef.fillStrategyId = rfs.fillStrategyId
        LEFT OUTER JOIN some_table_6_PARAMETER rp
        ON rdef.parameterId = rp.parameterId
        WHERE r.active = 1
        AND rdef.taskDefinitionId NOT LIKE 17


    DECLARE @taskId INT
    DECLARE @someOtherId INT
    DECLARE @someOtherName VARCHAR(255)
    DECLARE @externalSomeOtherId INT
    DECLARE @taskName VARCHAR(50)
    DECLARE @fromDB VARCHAR(50)
    DECLARE @toDB VARCHAR(50)
    DECLARE @storedProcedure VARCHAR(100)
    DECLARE @fillStrategyId INT
    DECLARE @parameterId INT

    OPEN taskCursor
    FETCH NEXT FROM taskCursor
    INTO
        @taskId, @someOtherId , @someOtherName , @externalSomeOtherId , @taskName, @fromDB, @toDB, @storedProcedure,
        @fillStrategyId, @parameterId

    WHILE @@FETCH_STATUS = 0 BEGIN
        INSERT INTO TEMP_LOGREPORT (text, report) VALUES('-------------------------------------------------------------------------------------------------------', @logReport)
        INSERT INTO TEMP_LOGREPORT (text, report) VALUES('Performing task: ' + @taskName, @logReport)
        INSERT INTO TEMP_LOGREPORT (text, report) VALUES('Nightly Job between: ' + @fromDB + ' -> ' + @toDB, @logReport)
        INSERT INTO TEMP_LOGREPORT (text, report) VALUES('Executive procedure: ' + @storedProcedure, @logReport)
        INSERT INTO TEMP_LOGREPORT (text, report) VALUES('Involved : ' + @someOtherName + ' (' + CAST(@someOtherId AS VARCHAR) + ')', @logReport)

        EXECUTE @storedProcedure @someOtherId , @externalSomeOtherId , @fillStrategyId, @parameterId, @userId, @processFullHistory

        INSERT INTO TEMP_LOGREPORT (text, report) VALUES('', @logReport)

        SET @taskId = NULL
        SET @someOtherId = NULL
        SET @someOtherName = NULL
        SET @externalSomeOtherId = NULL
        SET @taskName = NULL
        SET @fromDB = NULL
        SET @toDB = NULL
        SET @storedProcedure = NULL
        SET @fillStrategyId = NULL
        SET @parameterId = NULL

        FETCH NEXT FROM taskCursor
        INTO
            @taskId, @taskId , @someOtherName , @externalSomeOtherId , @taskName, @fromDB, @toDB, @storedProcedure,
            @fillStrategyId, @parameterId
    END
    CLOSE taskCursor
    DEALLOCATE taskCursor

    INSERT INTO TEMP_LOGREPORT (text, report) VALUES('=======================================================================================================', @logReport)
    INSERT INTO TEMP_LOGREPORT (text, report) VALUES('NightlyJob finished at ' + CAST(GETDATE() AS VARCHAR), @logReport)
    INSERT INTO TEMP_LOGREPORT (text, report) VALUES('=======================================================================================================', @logReport)
    RETURN 0
END

After this it opens up to about 15 different stored procedures, depending which tasks are ‘defined’ every evening..

If I comment-out the actual execution of it

EXECUTE @storedProcedure @someOtherId , @externalSomeOtherId , @fillStrategyId, @parameterId, @userId, @processFullHistory

then it completes without error.

Thanks already for looking at my question ;-)

Hi,

What I need to do is take some data from a local database and send it to a remote mysql table. The Linked server is all set up and working.

When everything is put into a query it runs fine but if I put it into a job it fails with the above error.

Originally I had the different parts in different steps but it fails if they are combined into one as well.

here are the steps:

STEP 1:

EXEC(‘TRUNCATE TABLE trends_collection.productsStockTemp’) AT «TRENDS_WEB_DB»

STEP 2:

INSERT openquery(TRENDS_WEB_DB,
‘SELECT 
productsStockTemp.Code,
productsStockTemp.PartName, 
productsStockTemp.Quantity, 
productsStockTemp.DueDate,
productsStockTemp.SortCode
FROM trends_collection.productsStockTemp’)
SELECT 
.BomStructure.ParentPart,
InvMaster.LongDesc,
InvWarehouse.QtyOnHand — InvWarehouse.QtyAllocated — InvWarehouse.QtyAllocatedWip,
[PorMasterDetail.MLatestDueDate,
BomStructure.ReasonForChange
FROM
BomStructure INNER JOIN InvMaster ON BomStructure.Component = InvMaster.StockCode 
INNER JOIN InvWarehouse ON BomStructure.Component = InvWarehouse.StockCode
INNER JOIN PorMasterDetail ON .BomStructure.Component = PorMasterDetail.MStockCode
WHERE
BomStructure.ReasonForChange > ‘0’
AND 
PorMasterDetail.MCompleteFlag <> ‘Y’

STEP 3:

EXEC(‘ALTER TABLE trends_collection.productsStock RENAME TO trends_collection.productsStockOld’) AT «TRENDS_WEB_DB»

STEP 4:

EXEC(‘ALTER TABLE trends_collection.productsStockTemp RENAME TO trends_collection.productsStock’) AT «TRENDS_WEB_DB»

STEP 5:

EXEC(‘ALTER TABLE trends_collection.productsStockOld RENAME TO trends_collection.productsStockTemp’) AT «TRENDS_WEB_DB»

Any help would be appreciated.

Общая настройка

Это странный вопрос, и я сожалею об этом. Я действительно потратил некоторое время на поиск и анализ нашего кода. У нас есть работа, вызывающая хранимую процедуру, которая выбирает некоторые данные, а затем вызывает другие хранимые процедуры (некоторые имена извлекаются с помощью операторов select, поскольку они могут меняться). Он вызывает около 20 различных этих хранимых процедур примерно в 10 000 раз (суммирует различные вызовы), просто изменяя параметры. Эти хранимые процедуры извлекают некоторые данные, а затем вставляют данные в нашу базу данных.

Версия SQL-Server

Это отлично работало в Microsoft SQL Server 2005, но с тех пор, как мы перешли на SQL-Server 2012 (11.0.3000.0), и эта проблема, похоже, началась с тех пор, или мы просто не знали об этом раньше.

ошибка

Поэтому мы получаем эту ошибку каждый раз, когда мы ее выполняем:

Executed as user: #DATABASEUSER_RMV_FOR_STACKOVERFLOW. Incorrect syntax near ')'.
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'.
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'.
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'.
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'.
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'.
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'.
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'.
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'.
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'.
[SQLSTATE 42000] (Error 102).  The step failed.

Я знаю, что это очень мало информации, но наши скрипты довольно большие, и я хотел бы спросить, что некоторые из вас могли бы решить эту проблему.

Что я сделал до сих пор

Я просмотрел сценарии, сделал несколько сухих пробегов (b/c весь скрипт работает около часа… (это ночная работа)). Сухие трассы прекрасно работали. Также у нас почти нет открывающих скобок, и они всегда закрываются. Как только он извлекает данные, после часа работы он “сбой” с этой ошибкой…

Итак, что я сделал:

  • Сухой запуск (без фактической загрузки данных, но вызов большинства хранимых процедур) – хорошо, успех
  • Вызывается непосредственно основная процедура магазина (не как работа) – не работала ни
  • Прочтите код, искавшийся для ошибок в скобках – ok, ошибок в скобках не найдено
  • Работало с разными пользователями: db-admin, мой пользователь – не работал ни
  • Поиск через Google/Stackoverflow/littlbe бит через stackexchange в целом

Вопросов

Похоже, все, что должен сделать скрипт, сделано правильно и полностью, поэтому мы не понимаем, почему он не возвращает “успех” и бросает это сообщение об ошибке.

Я мог представить, что может быть поле, которое он извлекает, содержащий escape-символ… это имело бы смысл?

Могу ли я установить универсальную точку останова, что выполнение скрипта сломается, как только появится эта ошибка, и покажите мне, что данные вызывают эту ошибку… например, отладка кода в visual studio?

Поэтому мой главный вопрос: не могли бы вы дать мне подсказку/помочь как лучше подойти к этой ошибке? Что я должен делать?


работа

EXEC MY_SCHEME.dbo.MY_STOREDPROCEDURE_MAIN

MY_STOREDPROCEDURE_MAIN

SET NOCOUNT ON;

-- Insert statements for procedure here
DECLARE @userId INT
DECLARE @fullHistory BIT

SELECT @userId = userId
FROM MY_SCHEME.dbo.USERS
WHERE loginname = 'SOME_NAME'

SET @fullHistory = 0

EXECUTE MY_SCHEME.dbo.spStartMyNightlyJob @userId=@userId, @processFullHistory=@fullHistory

spStartMyNightlyJob

PROCEDURE [dbo].[spStartMyNightlyJob]
@userId INT,
@processFullHistory BIT
AS
BEGIN
SET NOCOUNT ON

DECLARE @logReport VARCHAR(255)
SET @logReport = 'NightlyJob'

INSERT INTO TEMP_LOGREPORT (text, report) VALUES('=======================================================================================================', @logReport)
INSERT INTO TEMP_LOGREPORT (text, report) VALUES('NightlyJob started at ' + CAST(GETDATE() AS VARCHAR), @logReport)
INSERT INTO TEMP_LOGREPORT (text, report) VALUES('=======================================================================================================', @logReport)

DECLARE taskCursor CURSOR LOCAL FAST_FORWARD READ_ONLY FOR
SELECT
r.taskId, link.Id, i.Description, link.externalId, rdef.name, rdir.fromDB, rdir.toDB,
rdef.procedureName, rfs.fillStrategyId, rp.parameterId
FROM MY_TASK r
LEFT OUTER JOIN some_table_1 link
ON r.LinkId = link.LinkId
LEFT OUTER JOIN some_table_2 i
ON link.Id = i.Id
LEFT OUTER JOIN some_table_3_TASK_DEFINITION rdef
ON r.taskDefinitionId = rdef.taskDefinitionId
LEFT OUTER JOIN some_table_4_TASK_DIRECTION rdir
ON rdef.directionId = rdir.directionId
LEFT OUTER JOIN some_table_5_FILL_STRATEGY rfs
ON rdef.fillStrategyId = rfs.fillStrategyId
LEFT OUTER JOIN some_table_6_PARAMETER rp
ON rdef.parameterId = rp.parameterId
WHERE r.active = 1
AND rdef.taskDefinitionId NOT LIKE 17


DECLARE @taskId INT
DECLARE @someOtherId INT
DECLARE @someOtherName VARCHAR(255)
DECLARE @externalSomeOtherId INT
DECLARE @taskName VARCHAR(50)
DECLARE @fromDB VARCHAR(50)
DECLARE @toDB VARCHAR(50)
DECLARE @storedProcedure VARCHAR(100)
DECLARE @fillStrategyId INT
DECLARE @parameterId INT

OPEN taskCursor
FETCH NEXT FROM taskCursor
INTO
@taskId, @someOtherId , @someOtherName , @externalSomeOtherId , @taskName, @fromDB, @toDB, @storedProcedure,
@fillStrategyId, @parameterId

WHILE @@FETCH_STATUS = 0 BEGIN
INSERT INTO TEMP_LOGREPORT (text, report) VALUES('-------------------------------------------------------------------------------------------------------', @logReport)
INSERT INTO TEMP_LOGREPORT (text, report) VALUES('Performing task: ' + @taskName, @logReport)
INSERT INTO TEMP_LOGREPORT (text, report) VALUES('Nightly Job between: ' + @fromDB + ' -> ' + @toDB, @logReport)
INSERT INTO TEMP_LOGREPORT (text, report) VALUES('Executive procedure: ' + @storedProcedure, @logReport)
INSERT INTO TEMP_LOGREPORT (text, report) VALUES('Involved : ' + @someOtherName + ' (' + CAST(@someOtherId AS VARCHAR) + ')', @logReport)

EXECUTE @storedProcedure @someOtherId , @externalSomeOtherId , @fillStrategyId, @parameterId, @userId, @processFullHistory

INSERT INTO TEMP_LOGREPORT (text, report) VALUES('', @logReport)

SET @taskId = NULL
SET @someOtherId = NULL
SET @someOtherName = NULL
SET @externalSomeOtherId = NULL
SET @taskName = NULL
SET @fromDB = NULL
SET @toDB = NULL
SET @storedProcedure = NULL
SET @fillStrategyId = NULL
SET @parameterId = NULL

FETCH NEXT FROM taskCursor
INTO
@taskId, @taskId , @someOtherName , @externalSomeOtherId , @taskName, @fromDB, @toDB, @storedProcedure,
@fillStrategyId, @parameterId
END
CLOSE taskCursor
DEALLOCATE taskCursor

INSERT INTO TEMP_LOGREPORT (text, report) VALUES('=======================================================================================================', @logReport)
INSERT INTO TEMP_LOGREPORT (text, report) VALUES('NightlyJob finished at ' + CAST(GETDATE() AS VARCHAR), @logReport)
INSERT INTO TEMP_LOGREPORT (text, report) VALUES('=======================================================================================================', @logReport)
RETURN 0
END

После этого он открывает около 15 различных хранимых процедур, в зависимости от того, какие задачи “определяются” каждый вечер.

Если я прокомментирую фактическое его выполнение

EXECUTE @storedProcedure @someOtherId , @externalSomeOtherId , @fillStrategyId, @parameterId, @userId, @processFullHistory

то он завершается без ошибок.

Спасибо уже за то, что посмотрел на мой вопрос 😉

  • Remove From My Forums
  • Question

  • We have recently installed SQL 2008 on a new server and wish to use it as the report manager for our existing SQL2005 reports. We redeployed our reports and they execute without any problems. Our issue is that the subscriptions will not work. We can set them up no problem but when their execution time passes all we get is an error in the 2008 server event log saying «Incorrect Syntax near ‘Server’. [SQLSTATE 42000] [Error 102]». I have tried to ensure all authorities have been set up correctly but I feel it is an issue with 2008 trying to communicate with the 2005 server where the data resides. Any input / suggestions greately appreciated.  

Answers

  • In the actual sql job can you verify that the job that controlls one of the subscriptions is not the problem

    you can find a job to test by means of going through the ReportServer.dbo.Schedule table which leads you by ScheduleID to the msdb.dbo.sysjobs table to find a meaningful name by the id which is used for job naming conventions.
    e.g.

    Select


    cat
    .[Name]
    ,sub.LastRunTime
    ,sch.ConsistancyCheck
    ,jobs.[Name]
    From
    ReportServer
    .dbo.[Catalog] cat
    Join ReportServer.dbo.Subscriptions sub on cat.itemid = sub.Report_OID
    Join ReportServer.dbo.Schedule sch on sub.SubscriptionID = sch.[eventdata]
    Join msdb.dbo.sysjobs jobs on Cast(sch.ScheduleID as varchar(40)) = jobs.[Name]

    Run the job you want manually and see if the error is more specific.

    • Marked as answer by

      Monday, September 28, 2009 3:56 PM

  • Remove From My Forums
  • Question

  • We have recently installed SQL 2008 on a new server and wish to use it as the report manager for our existing SQL2005 reports. We redeployed our reports and they execute without any problems. Our issue is that the subscriptions will not work. We can set them up no problem but when their execution time passes all we get is an error in the 2008 server event log saying «Incorrect Syntax near ‘Server’. [SQLSTATE 42000] [Error 102]». I have tried to ensure all authorities have been set up correctly but I feel it is an issue with 2008 trying to communicate with the 2005 server where the data resides. Any input / suggestions greately appreciated.  

Answers

  • In the actual sql job can you verify that the job that controlls one of the subscriptions is not the problem

    you can find a job to test by means of going through the ReportServer.dbo.Schedule table which leads you by ScheduleID to the msdb.dbo.sysjobs table to find a meaningful name by the id which is used for job naming conventions.
    e.g.

    Select


    cat
    .[Name]
    ,sub.LastRunTime
    ,sch.ConsistancyCheck
    ,jobs.[Name]
    From
    ReportServer
    .dbo.[Catalog] cat
    Join ReportServer.dbo.Subscriptions sub on cat.itemid = sub.Report_OID
    Join ReportServer.dbo.Schedule sch on sub.SubscriptionID = sch.[eventdata]
    Join msdb.dbo.sysjobs jobs on Cast(sch.ScheduleID as varchar(40)) = jobs.[Name]

    Run the job you want manually and see if the error is more specific.

    • Marked as answer by

      Monday, September 28, 2009 3:56 PM

Здравствуйте! Как исправить ошибку? Есть внешний источник данных, в нем таблица dbo_ML. Пытаюсь сделать запись. Выдает ошибку. Ошибка при вызове метода контекста (Записать): Ошибка внешней базы данных: ошибка при выполнении запроса: Ошибка ODBC. SQLSTATE: 42000 Номер ошибки: 102 Описание: [Microsoft][ODBC SQL Server Driver][SQL Server]Неправильный синтаксис около конструкции «<«.

Нужно исправить синтаксис около конструкции «<«.

но у меня тут нет никакого «<»

посмотри ПараметрыСоединенияВнешнегоИсточникаДанных СУБД (DBMS) — вот это надо указывать явно

Соед.СтрокаСоединения = «Тут строку соединения»;

таблица в рид онли стоит?

посмотрела, в свойствах таблицы в конфигураторе — нет, галочка Только чтение снята.

бывают древние версии БД или ODBC — в таких ситуациях проще в БД добавить хранимую процедуру и вызывать ее через ВИД

что за процедура и что такое ВИД?

ВИД — внешний источник данных, кроме таблиц БД есть функции

как можно посмотреть где появляется конструкция «<«?

проблема решена! профайлер показывал INSERT INTO… (Kontr,lineID,uid) VALUES(<Bad type>,1,N’848e1289-33e7-49d5-999b-ac0e2be57e0d’) То есть необходимо было добавить Стр.Kontr = …

Тэги:

Комментарии доступны только авторизированным пользователям

Hi,

What I need to do is take some data from a local database and send it to a remote mysql table. The Linked server is all set up and working.

When everything is put into a query it runs fine but if I put it into a job it fails with the above error.

Originally I had the different parts in different steps but it fails if they are combined into one as well.

here are the steps:

STEP 1:

EXEC(‘TRUNCATE TABLE trends_collection.productsStockTemp’) AT «TRENDS_WEB_DB»

STEP 2:

INSERT openquery(TRENDS_WEB_DB,
‘SELECT 
productsStockTemp.Code,
productsStockTemp.PartName, 
productsStockTemp.Quantity, 
productsStockTemp.DueDate,
productsStockTemp.SortCode
FROM trends_collection.productsStockTemp’)
SELECT 
.BomStructure.ParentPart,
InvMaster.LongDesc,
InvWarehouse.QtyOnHand — InvWarehouse.QtyAllocated — InvWarehouse.QtyAllocatedWip,
[PorMasterDetail.MLatestDueDate,
BomStructure.ReasonForChange
FROM
BomStructure INNER JOIN InvMaster ON BomStructure.Component = InvMaster.StockCode 
INNER JOIN InvWarehouse ON BomStructure.Component = InvWarehouse.StockCode
INNER JOIN PorMasterDetail ON .BomStructure.Component = PorMasterDetail.MStockCode
WHERE
BomStructure.ReasonForChange > ‘0’
AND 
PorMasterDetail.MCompleteFlag <> ‘Y’

STEP 3:

EXEC(‘ALTER TABLE trends_collection.productsStock RENAME TO trends_collection.productsStockOld’) AT «TRENDS_WEB_DB»

STEP 4:

EXEC(‘ALTER TABLE trends_collection.productsStockTemp RENAME TO trends_collection.productsStock’) AT «TRENDS_WEB_DB»

STEP 5:

EXEC(‘ALTER TABLE trends_collection.productsStockOld RENAME TO trends_collection.productsStockTemp’) AT «TRENDS_WEB_DB»

Any help would be appreciated.

Общая настройка

Это странный вопрос, и я сожалею об этом. Я действительно потратил некоторое время на поиск и анализ нашего кода. У нас есть работа, вызывающая хранимую процедуру, которая выбирает некоторые данные, а затем вызывает другие хранимые процедуры (некоторые имена извлекаются с помощью операторов select, поскольку они могут меняться). Он вызывает около 20 различных этих хранимых процедур примерно в 10 000 раз (суммирует различные вызовы), просто изменяя параметры. Эти хранимые процедуры извлекают некоторые данные, а затем вставляют данные в нашу базу данных.

Версия SQL-Server

Это отлично работало в Microsoft SQL Server 2005, но с тех пор, как мы перешли на SQL-Server 2012 (11.0.3000.0), и эта проблема, похоже, началась с тех пор, или мы просто не знали об этом раньше.

ошибка

Поэтому мы получаем эту ошибку каждый раз, когда мы ее выполняем:

Executed as user: #DATABASEUSER_RMV_FOR_STACKOVERFLOW. Incorrect syntax near ')'.
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'.
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'.
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'.
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'.
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'.
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'.
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'.
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'.
[SQLSTATE 42000] (Error 102)  Incorrect syntax near ')'.
[SQLSTATE 42000] (Error 102).  The step failed.

Я знаю, что это очень мало информации, но наши скрипты довольно большие, и я хотел бы спросить, что некоторые из вас могли бы решить эту проблему.

Что я сделал до сих пор

Я просмотрел сценарии, сделал несколько сухих пробегов (b/c весь скрипт работает около часа… (это ночная работа)). Сухие трассы прекрасно работали. Также у нас почти нет открывающих скобок, и они всегда закрываются. Как только он извлекает данные, после часа работы он “сбой” с этой ошибкой…

Итак, что я сделал:

  • Сухой запуск (без фактической загрузки данных, но вызов большинства хранимых процедур) – хорошо, успех
  • Вызывается непосредственно основная процедура магазина (не как работа) – не работала ни
  • Прочтите код, искавшийся для ошибок в скобках – ok, ошибок в скобках не найдено
  • Работало с разными пользователями: db-admin, мой пользователь – не работал ни
  • Поиск через Google/Stackoverflow/littlbe бит через stackexchange в целом

Вопросов

Похоже, все, что должен сделать скрипт, сделано правильно и полностью, поэтому мы не понимаем, почему он не возвращает “успех” и бросает это сообщение об ошибке.

Я мог представить, что может быть поле, которое он извлекает, содержащий escape-символ… это имело бы смысл?

Могу ли я установить универсальную точку останова, что выполнение скрипта сломается, как только появится эта ошибка, и покажите мне, что данные вызывают эту ошибку… например, отладка кода в visual studio?

Поэтому мой главный вопрос: не могли бы вы дать мне подсказку/помочь как лучше подойти к этой ошибке? Что я должен делать?


работа

EXEC MY_SCHEME.dbo.MY_STOREDPROCEDURE_MAIN

MY_STOREDPROCEDURE_MAIN

SET NOCOUNT ON;

-- Insert statements for procedure here
DECLARE @userId INT
DECLARE @fullHistory BIT

SELECT @userId = userId
FROM MY_SCHEME.dbo.USERS
WHERE loginname = 'SOME_NAME'

SET @fullHistory = 0

EXECUTE MY_SCHEME.dbo.spStartMyNightlyJob @userId=@userId, @processFullHistory=@fullHistory

spStartMyNightlyJob

PROCEDURE [dbo].[spStartMyNightlyJob]
@userId INT,
@processFullHistory BIT
AS
BEGIN
SET NOCOUNT ON

DECLARE @logReport VARCHAR(255)
SET @logReport = 'NightlyJob'

INSERT INTO TEMP_LOGREPORT (text, report) VALUES('=======================================================================================================', @logReport)
INSERT INTO TEMP_LOGREPORT (text, report) VALUES('NightlyJob started at ' + CAST(GETDATE() AS VARCHAR), @logReport)
INSERT INTO TEMP_LOGREPORT (text, report) VALUES('=======================================================================================================', @logReport)

DECLARE taskCursor CURSOR LOCAL FAST_FORWARD READ_ONLY FOR
SELECT
r.taskId, link.Id, i.Description, link.externalId, rdef.name, rdir.fromDB, rdir.toDB,
rdef.procedureName, rfs.fillStrategyId, rp.parameterId
FROM MY_TASK r
LEFT OUTER JOIN some_table_1 link
ON r.LinkId = link.LinkId
LEFT OUTER JOIN some_table_2 i
ON link.Id = i.Id
LEFT OUTER JOIN some_table_3_TASK_DEFINITION rdef
ON r.taskDefinitionId = rdef.taskDefinitionId
LEFT OUTER JOIN some_table_4_TASK_DIRECTION rdir
ON rdef.directionId = rdir.directionId
LEFT OUTER JOIN some_table_5_FILL_STRATEGY rfs
ON rdef.fillStrategyId = rfs.fillStrategyId
LEFT OUTER JOIN some_table_6_PARAMETER rp
ON rdef.parameterId = rp.parameterId
WHERE r.active = 1
AND rdef.taskDefinitionId NOT LIKE 17


DECLARE @taskId INT
DECLARE @someOtherId INT
DECLARE @someOtherName VARCHAR(255)
DECLARE @externalSomeOtherId INT
DECLARE @taskName VARCHAR(50)
DECLARE @fromDB VARCHAR(50)
DECLARE @toDB VARCHAR(50)
DECLARE @storedProcedure VARCHAR(100)
DECLARE @fillStrategyId INT
DECLARE @parameterId INT

OPEN taskCursor
FETCH NEXT FROM taskCursor
INTO
@taskId, @someOtherId , @someOtherName , @externalSomeOtherId , @taskName, @fromDB, @toDB, @storedProcedure,
@fillStrategyId, @parameterId

WHILE @@FETCH_STATUS = 0 BEGIN
INSERT INTO TEMP_LOGREPORT (text, report) VALUES('-------------------------------------------------------------------------------------------------------', @logReport)
INSERT INTO TEMP_LOGREPORT (text, report) VALUES('Performing task: ' + @taskName, @logReport)
INSERT INTO TEMP_LOGREPORT (text, report) VALUES('Nightly Job between: ' + @fromDB + ' -> ' + @toDB, @logReport)
INSERT INTO TEMP_LOGREPORT (text, report) VALUES('Executive procedure: ' + @storedProcedure, @logReport)
INSERT INTO TEMP_LOGREPORT (text, report) VALUES('Involved : ' + @someOtherName + ' (' + CAST(@someOtherId AS VARCHAR) + ')', @logReport)

EXECUTE @storedProcedure @someOtherId , @externalSomeOtherId , @fillStrategyId, @parameterId, @userId, @processFullHistory

INSERT INTO TEMP_LOGREPORT (text, report) VALUES('', @logReport)

SET @taskId = NULL
SET @someOtherId = NULL
SET @someOtherName = NULL
SET @externalSomeOtherId = NULL
SET @taskName = NULL
SET @fromDB = NULL
SET @toDB = NULL
SET @storedProcedure = NULL
SET @fillStrategyId = NULL
SET @parameterId = NULL

FETCH NEXT FROM taskCursor
INTO
@taskId, @taskId , @someOtherName , @externalSomeOtherId , @taskName, @fromDB, @toDB, @storedProcedure,
@fillStrategyId, @parameterId
END
CLOSE taskCursor
DEALLOCATE taskCursor

INSERT INTO TEMP_LOGREPORT (text, report) VALUES('=======================================================================================================', @logReport)
INSERT INTO TEMP_LOGREPORT (text, report) VALUES('NightlyJob finished at ' + CAST(GETDATE() AS VARCHAR), @logReport)
INSERT INTO TEMP_LOGREPORT (text, report) VALUES('=======================================================================================================', @logReport)
RETURN 0
END

После этого он открывает около 15 различных хранимых процедур, в зависимости от того, какие задачи “определяются” каждый вечер.

Если я прокомментирую фактическое его выполнение

EXECUTE @storedProcedure @someOtherId , @externalSomeOtherId , @fillStrategyId, @parameterId, @userId, @processFullHistory

то он завершается без ошибок.

Спасибо уже за то, что посмотрел на мой вопрос 😉

Понравилась статья? Поделить с друзьями:
  • Ошибка obs если вы используете кодировщики nvenc
  • Ошибка odbc sqlstate 23000 номер ошибки 544
  • Ошибка obs files are being used by the following
  • Ошибка objxl getcertlistasjson is not a function
  • Ошибка odbc sqlstate 08001 номер ошибки 17