sp_execute mengharapkan parameter '@handle' dari tipe 'int'

9

Saya mencoba memeriksa prosedur tersimpan jika ada tabel di basis data tujuan saya. Jika tidak, maka saya akan membuat tabel menggunakan tabel information_schema dari sumber database. Namun ketika saya menggunakan sp_execute untuk mencoba dan membawa kembali jika tabel ada saya menerima kesalahan Prosedur mengharapkan parameter '@tangan' dari tipe 'int'.

Saya tidak menggunakan parameter @handle. Dapatkah seseorang memberi tahu saya apa arti kesalahan ini dan mengapa saya menerimanya? Bagian relevan dari kode saya di bawah ini.

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
Kental
sumber
4
Apakah Anda bermaksud menelepon sp_executesqlbukan sp_execute?
Philᵀᴹ
Variabel @TableNotExistsOutsalah dieja dalam teks SQL.
Jon Seigel

Jawaban:

11

Saya pikir Anda bermaksud menggunakan sp_executesql:

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

Dan seperti yang ditunjukkan JonSeigel dalam komentar, Anda salah mengeja parameter dalam pernyataan Anda:

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'

Itu seharusnya @TableNotExistsOUT.

Thomas Stringer
sumber