gpt4 book ai didi

SQLSTATE 42000(错误102) ')'附近的语法不正确

转载 作者:行者123 更新时间:2023-12-03 03:23:00 32 4
gpt4 key购买 nike

常规设置

这是一个奇怪的问题,我对此感到抱歉。实际上我花了相当多的时间搜索和分析我们的代码。我们有一项工作调用一个存储过程,该过程选择一些数据,然后调用其他存储过程(其中一些名称是使用 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整个脚本运行了大约一个小时......(这是每晚的工作))。试运行效果很好。而且我们几乎没有左括号,而且它们总是关闭的。一旦它检索数据,运行一小时后就会“崩溃”并出现此错误......

所以我做了什么:

  • 试运行(没有实际加载数据,而是调用大部分存储过程)- 好的,成功
  • 直接调用主存储过程(不是作为作业) - 也不起作用
  • 通读搜索括号错误的代码 - 好的,没有发现括号错误
  • 使用不同的用户运行:db-admin,我的用户 - 也不起作用
  • 一般通过 Google/Stackoverflow/稍微通过 stackexchange 进行搜索

问题

看起来脚本必须做的所有事情都正确且完整地完成,因此我们不明白为什么它不返回“成功”并向我们抛出此错误消息。

我可以想象它检索到的字段可能包含转义字符...这有意义吗?

我可以像通用断点一样设置,一旦发生此“错误”,脚本的执行就会中断,并向我显示导致此错误的数据......就像在 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

然后就完成了,没有错误。

感谢您查看我的问题;-)

最佳答案

问题在于您的第二个插入语句。用此替换旧的语句。

create table #temp1 (text nvarchar(100),report nvarchar(500))
INSERT INTO #temp1 (text, report) VALUES('NightlyJob started at ' + '' + CAST(GETDATE() AS VARCHAR) + '','Report')
select * from #temp1

关于SQLSTATE 42000(错误102) ')'附近的语法不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22400449/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com