Estou tentando verificar em um procedimento armazenado se existe uma tabela no meu banco de dados de destino. Caso contrário, criarei a tabela usando as tabelas information_schema do banco de dados de origem. No entanto, quando eu uso sp_execute para tentar retornar se a tabela existir, estou recebendo o erro O procedimento espera o parâmetro '@handle' do tipo 'int'.
Não estou usando um parâmetro @handle. Alguém pode me dizer o que esse erro significa e por que estou recebendo? A parte relevante do meu código está abaixo.
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
sql-server
sql-server-2008
t-sql
dynamic-sql
Grumoso
fonte
fonte
sp_executesql
vez desp_execute
?@TableNotExistsOut
está grafada incorretamente no texto SQL.Respostas:
Eu acho que você pretendia usar
sp_executesql
:E como JonSeigel apontou no comentário, você digitou incorretamente um parâmetro em sua declaração:
Isso deveria ser
@TableNotExistsOUT
.fonte