sp_execute prevede il parametro '@handle' di tipo 'int'


9

Sto cercando di verificare in una procedura memorizzata se esiste una tabella nel mio database di destinazione. In caso contrario, creerò la tabella utilizzando le tabelle information_schema dal database di origine. Tuttavia, quando utilizzo sp_execute per provare a riportare se la tabella esiste, ricevo l'errore La procedura prevede il parametro '@handle' di tipo 'int'.

Non sto usando un parametro @handle. Qualcuno può dirmi cosa significa questo errore e perché lo sto ricevendo? La parte pertinente del mio codice è di seguito.

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
Intendevi chiamare sp_executesqlpiuttosto che sp_execute?
Philᵀᴹ

La variabile non @TableNotExistsOutè stata digitata correttamente nel testo SQL.
Jon Seigel,

Risposte:


11

Penso che volevi usare sp_executesql:

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

E come ha sottolineato JonSeigel nel commento, hai scritto male un parametro nella tua dichiarazione:

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'

Questo dovrebbe essere @TableNotExistsOUT.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.