sp_execute mong đợi tham số '@handle' của loại 'int'


9

Tôi đang cố kiểm tra một thủ tục được lưu trữ nếu một bảng tồn tại trong cơ sở dữ liệu đích của tôi. Nếu không thì tôi sẽ tạo bảng sử dụng các bảng information_schema từ cơ sở dữ liệu nguồn. Tuy nhiên, khi tôi sử dụng sp_execute để thử và mang lại nếu bảng tồn tại, tôi nhận được lỗi Quy trình mong đợi tham số '@handle' của loại 'int'.

Tôi không sử dụng tham số @handle. Ai đó có thể cho tôi biết lỗi này có nghĩa là gì và tại sao tôi nhận được nó không? Phần liên quan của mã của tôi là dưới đây.

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
Ý của bạn là gọi sp_executesqlchứ không phải sp_execute?
Philᵀᴹ

Biến @TableNotExistsOutđược viết sai chính tả trong văn bản SQL.
Jon Seigel

Câu trả lời:


11

Tôi nghĩ bạn có ý định sử dụng sp_executesql:

EXEC sp_Executesql @SQL, @Parameters, @SourceTableIN = @SourceTable, @TableNotExistsOut = @TableNotExists OUTPUT

Và như JonSeigel đã chỉ ra trong bình luận, bạn đã đánh vần sai một tham số trong câu lệnh của mình:

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'

Điều đó nên được @TableNotExistsOUT.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.