J'essaie de vérifier dans une procédure stockée si une table existe dans ma base de données de destination. Si ce n'est pas le cas, je vais créer la table en utilisant les tables information_schema de la base de données source. Cependant, lorsque j'utilise sp_execute pour essayer de ramener si la table existe, je reçois l'erreur La procédure attend le paramètre '@handle' de type 'int'.
Je n'utilise pas de paramètre @handle. Quelqu'un peut-il me dire ce que signifie cette erreur et pourquoi je la reçois? La partie pertinente de mon code est ci-dessous.
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
Grumeleux
la source
la source
sp_executesql
plutôt quesp_execute
?@TableNotExistsOut
n'est pas orthographiée correctement dans le texte SQL.Réponses:
Je pense que vous vouliez utiliser
sp_executesql
:Et comme JonSeigel l'a souligné dans le commentaire, vous avez mal orthographié un paramètre dans votre déclaration:
Ça devrait l'être
@TableNotExistsOUT
.la source