sp_execute 'int' türündeki '@handle' parametresini bekliyor


9

Hedef veritabanımda bir tablo varsa saklı bir yordamı denetlemeye çalışıyorum. Değilse, kaynak veritabanından information_schema tablolarını kullanarak tablo oluşturacağım. Ancak denemek ve tablo varsa geri getirmek için sp_execute kullandığımda hata alıyorum yordamı 'int' türünde '@handle' parametre bekliyor.

@Handle parametresi kullanmıyorum. Birisi bana bu hatanın ne anlama geldiğini ve neden aldığımı söyleyebilir mi? Kodumun uygun kısmı aşağıda.

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
Aramak sp_executesqlyerine mi demek istediniz sp_execute?
Philᵀᴹ

Değişken @TableNotExistsOutSQL metninde yanlış yazılmıştır.
Jon Seigel

Yanıtlar:


11

Bence kullanmak istediniz sp_executesql:

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

JonSeigel'in yorumda belirttiği gibi, ifadenizde yanlış bir parametre yazdınız:

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'

Öyle olmalı @TableNotExistsOUT.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.