sp_execute期望类型为'int'的参数'@handle'


9

我正在尝试检查存储过程,如果我的目标数据库中存在表。如果没有,那么我将使用源数据库中的information_schema表创建表。但是,当我使用sp_execute尝试并返回表(如果该表存在)时,会收到错误消息,过程期望类型为'int'的参数'@handle'。

我没有使用@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文本中的拼写错误。
乔恩·塞格尔

Answers:


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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.