Хранимая процедура для удаления таблицы

Я создал хранимую процедуру, которая отбрасывает таблицу, если она существует в базе данных. При запуске хранимой процедуры с помощью EXEC я получаю следующую ошибку:

Сообщение 203, уровень 16, состояние 2, процедура sp_DropIfExists, строка 13 Имя IF СУЩЕСТВУЕТ (ВЫБЕРИТЕ 1 ИЗ sys.objects ГДЕ OBJECT_ID = OBJECT_ID (N'table_name) И введите = (N'U ')) DROP TABLE [table_name] 'не является допустимым идентификатор.

Однако, если я скопирую и вставлю созданный T-SQL в студию управления, похоже, он будет работать нормально. Может кто-нибудь объяснить, почему это неверно? Исправление было бы неплохим, но я действительно после "Почему", а "Как" было бы неплохо! Заранее спасибо.

ALTER PROCEDURE [dbo].[sp_DropIfExists](@tableName VARCHAR(255)) 
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @SQL VARCHAR(MAX);
    SET @SQL = 'IF EXISTS(SELECT 1 FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N''' + @tableName + ''') AND type = (N''U'')) DROP TABLE [' + @tableName + ']'
    PRINT @SQL;
    EXEC @SQL;
END
8
задан Drew 9 October 2013 в 02:55
поделиться