Значение интерпретируется как имя хранимой процедуры для выполнения, а не как скрипт. (Я не знал этого раньше, но я сделал небольшой тест, чтобы убедиться, что это действительно так.)

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

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

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

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

Ответы на вопрос(4)

Ваш ответ на вопрос