Sql-Server

sp_execute 需要“int”類型的參數“@handle”

  • July 31, 2012

如果目標數據庫中存在表,我正在嘗試簽入儲存過程。如果沒有,那麼我將使用源數據庫中的 information_schema 表創建表。但是,當我使用 sp_execute 嘗試恢復表是否存在時,我收到錯誤 Procedure requires parameter ‘@handle’ of type ‘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

我認為您打算使用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

引用自:https://dba.stackexchange.com/questions/21754