这是我的存储过程:
CREATE PROCEDURE uspUpdateDataInBapMidTable (
@companyName varchar(50)
)
AS
BEGIN
SET @companyName = 'nürnberger'
DECLARE @tableNameMid varchar(50) , @tableNameIn varchar(50) , @queryToCreateTable nvarchar (500) , @queryToAddColumn nvarchar(500)
DECLARE @queryToUpdateBapMid nvarchar(500)
SET @tableNameMid = 'BAP_'+@companyName+'_MID'
SET @tableNameIn = 'BAP_'+@companyName+'_IN'
DECLARE @COGI varchar (50)
SET @COGI = ''
SET NOCOUNT ON
DECLARE @collectionOfGesellschaft_id nvarchar(100)
DECLARE myCursor cursor FOR
SELECT distinct gesellschaft_id from CRM_Wifo_GmbH.dbo.vertrag_168 where gesellschaft like '%nürnberger%'
open myCursor
DECLARE @collectionOfGesellschaft_id1 nvarchar(100)
set @collectionOfGesellschaft_id = '('
fetch next from myCursor into @collectionOfGesellschaft_id1
while @@fetch_status = 0
begin
set @collectionOfGesellschaft_id = @collectionOfGesellschaft_id + @collectionOfGesellschaft_id1 + ' ,'
fetch next from myCursor into @collectionOfGesellschaft_id1
END
set @collectionOfGesellschaft_id = SUBSTRING(@collectionOfGesellschaft_id,1,LEN(@collectionOfGesellschaft_id)-1) + ')'
SET @COGI = @collectionOfGesellschaft_id
CLOSE myCursor
DEALLOCATE myCursor
go
SET @queryToUpdateBapMid = N'select distinct b.*,v.vertrag_id,v.VersicherungsscheinNummer
from CRM_Wifo_GmbH.dbo.vertrag_168 v,temp_universa b where v.VersicherungsscheinNummer like ''%'' + b.VSNR + ''%'' and v.gesellschaft_id in' + @COGI
EXEC(@queryToUpdateBapMid)
END
@companyName
用于我的测试目的。当我只执行游标时,它运行正常。但是在存储过程中它显示了以下错误:
Msg 102,Level 15,State 1,Procedure uspUpdateDataInBapMidTable,Line 33
'myCursor'附近的语法不正确。Msg 137,Level 15,State 2,Line 3
必须声明标量变量“@COGI”。Msg 137,Level 15,State 2,Line 4
必须声明标量变量“@queryToUpdateBapMid”。
我在SP的开头声明了这两个变量,但它们显示了这个错误。行
有什么问题 DEALLCOATE myCursor
答案 0 :(得分:1)
问题与go
行后面的DEALLOCATE myCursor
一词有关。
GO
不是SQL的一部分,也不是Transact-SQL的一部分。它是由SQL Server Management Studio或sqlcmd
等工具识别为关键字分隔符的关键字。遇到GO
时,您的脚本会在该点被拆分,而GO
之前的部分将与其后的部分分开执行。
特定脚本中的go
过早地将其拆分。它基本上使初始的BEGIN
保持未闭合状态,这实际上就是错误的内容,尽管如此,该消息可能看起来有些令人困惑。
无论如何,这是你的问题,所以,只需删除go
。