2016-08-03 3 views
2

У меня есть таблица #temp, где у меня есть имена хранимых процедур.DROP PROCEDURE вызывает синтаксическую ошибку

DECLARE @object VARCHAR(200) 
SET @object = (SELECT Top 1 Te.[this Object...] From #Temp Te) 

IF OBJECT_ID(@object) IS NOT NULL 
    DROP PROCEDURE @object 

Но на последнем этапе я получаю ошибку

Неправильный синтаксис около '@object'.

Это потому, что @object имеет тип VARCHAR или что?

Это для SQL Server 2012

+2

Используйте EXEC для запуска SQL DROP заявление, что вы построили внутри строки - идентификаторы объектов/имена не могут быть переменными. –

ответ

4

вы не можете сделать это, как это. Вам нужно использовать динамический sql. Что-то вроде:

DECLARE @object NVARCHAR(200) 
DECLARE @sql NVARCHAR(max) 
SET @object = (SELECT Top 1 Te.[this Object...] From #Temp Te) 
IF OBJECT_ID(@object) IS NOT NULL 
BEGIN 
    SET @sql = 'DROP PROCEDURE ' + @object 
    sp_executesql @sql 
END 
0

ПРОЦЕДУРА DROP необходим объект не VARCHAR

попробовать:

EXECUTE ('DROP PROCEDURE ' + @object) 
Смежные вопросы