sp_executeは、タイプ 'int'のパラメータ '@handle'を予期しています


9

宛先データベースにテーブルが存在するかどうかをストアドプロシージャでチェックインしようとしています。そうでない場合は、ソースデータベースのinformation_schemaテーブルを使用してテーブルを作成します。しかし、sp_executeを使用して、テーブルが存在する場合に返してみると、エラープロシージャで型 'int'のパラメーター '@handle'が予期されます。

@handleパラメータを使用していません。誰かがこのエラーの意味を教えてもらえますか?なぜ私がそれを受け取っているのですか?私のコードの関連部分は以下です。

DECLARE @SQL NVARCHAR(MAX),
        @Parameters NVARCHAR(4000),
        @TableNotExists INT,
        @SourceTable NVARCHAR(200),
        @DestDB NVARCHAR(200)

BEGIN

SET @SourceTable = 'table'
SET @DestDB = 'database'
SET @Parameters = N'@SourceTableIN NVARCHAR(200), @TableNotExistsOut INT OUTPUT'
SET @SQL = N'USE [' + @DestDB + '] IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = ''BASE TABLE'' AND TABLE_NAME = @SourceTableIN)
BEGIN SET @TableNotExistOUT = 1 END'

EXEC sp_Execute @SQL, @Parameters, @SourceTableIN = @SourceTable, @TableNotExistsOUt = @TableNotExists OUTPUT

END

4
sp_executesql代わりに電話するつもりsp_executeですか?
フィロ2012

@TableNotExistsOutSQLテキスト内で変数のスペルが間違っています。
Jon Seigel

回答:


11

私はあなたが使うつもりだったと思いますsp_executesql

EXEC sp_Executesql @SQL, @Parameters, @SourceTableIN = @SourceTable, @TableNotExistsOut = @TableNotExists OUTPUT

そして、JonSeigelがコメントで指摘したように、ステートメントのパラメーターのスペルを間違えました。

SET @SQL = N'USE [' + @DestDB + '] IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = ''BASE TABLE'' AND TABLE_NAME = @SourceTableIN)
BEGIN SET @TableNotExistOUT = 1 END'

それはあるはずです@TableNotExistsOUT

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.