sp_execute очікує параметр '@handle' типу 'int'


9

Я намагаюся перевірити збережену процедуру, чи існує таблиця в моїй базі даних призначення. Якщо цього не відбудеться, я створять таблицю з використанням таблиць information_schema з вихідної бази даних. Однак, коли я використовую sp_execute, щоб спробувати повернути, якщо таблиця існує, я отримую помилку Процедура очікує параметр '@handle' типу 'int'.

Я не використовую параметр @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?
Philᵀᴹ

Змінна @TableNotExistsOutнаписана неправильно в тексті SQL.
Джон Сейгель

Відповіді:


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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.