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ᵀᴹ

@TableNotExistsOutSQL 텍스트 내에서 변수의 철자가 잘못되었습니다.
Jon Seigel

답변:


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.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.