1

これが私のストアドプロシージャです:

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テスト目的で設定されています。カーソルのみを実行すると、正常に動作します。しかし、ストアドプロシージャでは次のエラーが表示されます:

メッセージ 102、レベル 15、状態 1、プロシージャ uspUpdateDataInBapMidTable、行 33
'myCursor' 付近の構文が正しくありません。

メッセージ 137、レベル 15、状態 2、行 3
スカラー変数「@COGI」を宣言する必要があります。

メッセージ 137、レベル 15、状態 2、行 4
スカラー変数「@queryToUpdateBapMid」を宣言する必要があります。

SPの開始時にこれら2つの変数を宣言しましたが、このエラーが表示されています。そして、ラインの問題は何ですか

 DEALLCOATE myCursor
4

1 に答える 1

1

go問題は、行の直後の単語に関係していDEALLOCATE myCursorます。

GO一般的な SQL の一部でも、特に Transact-SQL の一部でもありません。これは、SQL Server Management Studio などsqlcmdのツールによって、またはバッチ区切り記号として認識されるキーワードです。がGO検出されると、スクリプトはその時点で分割され、前GOの部分が後続の部分とは別に実行されます。

あなたのgo特定のスクリプトでは、時期尚早に分割されます。それは本質的に最初の部分を閉じないままBEGINにしておきます。実際にはそれがエラーの原因ですが、確かに、メッセージはやや混乱しているように見えるかもしれません.

とにかく、それはあなたの問題だったので、go.

于 2013-01-27T22:45:57.037 に答える