Lum*_*mpy 9 sql-server-2008 sql-server dynamic-sql t-sql
如果目标数据库中存在表,我正在尝试签入存储过程。如果没有,我将使用源数据库中的 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
Run Code Online (Sandbox Code Playgroud)
Tho*_*ger 11
我认为您打算使用sp_executesql:
EXEC sp_Executesql @SQL, @Parameters, @SourceTableIN = @SourceTable, @TableNotExistsOut = @TableNotExists OUTPUT
Run Code Online (Sandbox Code Playgroud)
正如 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'
Run Code Online (Sandbox Code Playgroud)
那应该是@TableNotExistsOUT。
| 归档时间: |
|
| 查看次数: |
13026 次 |
| 最近记录: |