Здравствуйте. Изучаю внешние источники данных. Создал базу на 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
- Marked as answer by
- 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
- Marked as answer by
Здравствуйте! Как исправить ошибку? Есть внешний источник данных, в нем таблица 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
то он завершается без ошибок.
Спасибо уже за то, что посмотрел на мой вопрос 😉