sp_execute ต้องการพารามิเตอร์ '@handle' ของประเภท 'int'


9

ฉันพยายามตรวจสอบขั้นตอนการจัดเก็บหากมีตารางอยู่ในฐานข้อมูลปลายทางของฉัน หากไม่เป็นเช่นนั้นฉันจะสร้างตารางโดยใช้ตาราง data_schema จากฐานข้อมูลต้นทาง อย่างไรก็ตามเมื่อฉันใช้ sp_execute เพื่อพยายามนำกลับมาหากตารางมีอยู่ฉันได้รับข้อผิดพลาดขั้นตอนคาดว่าพารามิเตอร์ '@handle' ของประเภท '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

4
คุณหมายถึงการโทรsp_executesqlมากกว่าsp_executeหรือเปล่า
Philᵀᴹ

ตัวแปร@TableNotExistsOutสะกดผิดภายในข้อความ SQL
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.